/*
* 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 lombok.AllArgsConstructor;
import lombok.Data;
/**
* Represents a gamer's detailed standing on a leaderboard.
*/
@Data
@AllArgsConstructor(suppressConstructorProperties = true)
public class Rank {
/** Nickname, suitable for public display. */
private final String name;
/** Scoretags associated with the gamer's leaderboard entry, if any. */
private final Object scoretags;
/** Most up to date rank. */
private final long rank;
/** When the latest rank was calculated. */
private final long rankAt;
/** The best score the gamer has entered on this leaderboard. */
private final long score;
/** When the best score was recorded. */
private final long scoreAt;
/**
* If this data is in response to a leaderboard submission, and the score
* submitted replaces the previous one, this field will contain that
* previous value.
*/
private final long lastScore;
/** When the previous score was submitted. */
private final long lastScoreAt;
/** What the rank on this leaderboard was when it was previously checked. */
private final long lastRank;
/** When the previous rank was calculated. */
private final long lastRankAt;
/** The highest rank this gamer has ever had on this leaderboard. */
private final long bestRank;
/** When the highest rank was recorded. */
private final long bestRankAt;
/**
* @return true if this is the first time the current gamer appears on this
* leaderboard, false otherwise.
*/
public boolean isNew() {
return lastRank == 0;
}
/**
* @return true if the response indicates the gamer has a new best score on
* this leaderboard, false otherwise.
*/
public boolean isNewScore() {
return score != lastScore;
}
/**
* @return true if the rank has changed since it was last checked,
* regardless if it's now higher or lower, false otherwise.
*/
public boolean isNewRank() {
return rank != lastRank;
}
/**
* @return true if this response contains a new all-time best rank on this
* leaderboard, false otherwise.
*/
public boolean isNewBestRank() {
return rank == bestRank && rankAt == bestRankAt;
}
}