/*
* Copyright 2014-2015 GameUp
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.gameup.android.entity;
import com.google.gson.annotations.SerializedName;
import lombok.AllArgsConstructor;
import lombok.Data;
/**
* Represents an achievement's data, also contains gamer progress if applicable.
*/
@Data
@AllArgsConstructor(suppressConstructorProperties = true)
public class Achievement {
/** Game-unique public identifier for this achievement. */
private final String publicId;
/** Achievement name. */
private final String name;
/** Achievement description or instructions. */
private final String description;
/** The type of the achievement, referring to gamer interaction model. */
private final Type type;
/**
* Number of points that will be awarded for completing this achievement,
* or have already been awarded if it is already complete.
*/
private final int points;
/** The state of this achievement, referring to display logic. */
private final State state;
/**
* Required number of actions to complete this achievement, subject to game
* logic. For "normal"-type achievements this will always be 1.
*/
private final int requiredCount;
/**
* Current gamer progress towards the required count of this achievement,
* subject to the same game logic as the requiredCount field.
*/
private final int count;
/**
* UTC timestamp in milliseconds when the gamer last made any progress
* towards this achievement, or 0 if no progress ever.
*/
private final long progressAt;
/**
* UTC timestamp in milliseconds when the gamer completed this achievement,
* or 0 if it has not yet been completed.
*/
private final long completedAt;
/**
* @return true if the gamer has completed this achievement,
* false otherwise.
*/
public boolean isCompleted() {
return completedAt > 0l;
}
/**
* Achievement Type, referring to how gamer interaction must occur.
*/
public enum Type {
/** Standard earned/unearned achievement. */
@SerializedName("normal")
NORMAL,
/**
* Incremental achievement, requiring some number of actions before it
* is awarded, subject to game logic.
*/
@SerializedName("incremental")
INCREMENTAL
}
/**
* Achievement State, referring to how display should be handled.
*/
public enum State {
/** The achievement and all its details are available to the gamer. */
@SerializedName("visible")
VISIBLE,
/**
* The name and description are replaced with "???", unless the gamer
* has completed the achievement.
*/
@SerializedName("secret")
SECRET,
/**
* The achievement does not appear at all, unless the gamer has
* completed the achievement.
*/
@SerializedName("hidden")
HIDDEN
}
}