History Scoreboard Details - UQdeco2800/2021-ext-studio-2 GitHub Wiki
On clicking a gold, silver or bronze trophy (whichever is applicable) for an associate score item in the history scoreboard screen, a dialog opens which shows the details of that particular game. This includes :-
- The game number
- Date of play
- Time of play
- Final score
- Achievements unlocked
- Distance travelled
All the data is fetched from GameRecords.
-
ScoreDetailsDialog.java: Contains code which fetches data from
GameRecords
andServiceLocator
and displays the associated score. The dialog opens when the eventScoreDetailsDialog.OPEN_SCORE_DETAILS_DIALOG
is triggered. The LibGDXDialog
class was used to bootstrap a dialog. This file can be found here.
// Event when a score row is clicked
// The Score object contains the score, game number, distance travelled, time of death etc.
entity.getEvents().addListener(OPEN_SCORE_DETAILS_DIALOG, (Score score) -> {
// Get the list of the best achievements for that particular game
List<BaseAchievementConfig> bestAchievements = GameRecords.getBestAchievementsByGame(score.game);
// Open the dialog
openDialog(score, bestAchievements);
});
-
HistoryScoreBoardDisplay.java: Displays gold, silver or bronze trophies beside the score and date of play. The metadata of each game is fetched from GameRecords. On clicking a particular trophy, the event
ScoreDetailsDialog.OPEN_SCORE_DETAILS_DIALOG
is triggered which displays aScoreDetailsDialog
.This file can be found here.
private ImageButton getStatusButton(Score score) {
List<BaseAchievementConfig> bestAchievementsByGame = GameRecords.getBestAchievementsByGame(score.game);
Set<String> unlockedAchievementTiers = bestAchievementsByGame.stream()
.map(achievement -> achievement.type)
.collect(Collectors.toSet());
// Fetch the highest tier trophy that the user unlocked.
if (unlockedAchievementTiers.contains("GOLD")) {
trophyStatus = getImageButton("images/achievements/achievementStatusGold.png");
} else if (unlockedAchievementTiers.contains("SILVER")) {
trophyStatus = getImageButton("images/achievements/achievementStatusSilver.png");
} else if (unlockedAchievementTiers.contains("BRONZE")) {
trophyStatus = getImageButton("images/achievements/achievementStatusBronze.png");
} else {
trophyStatus = getImageButton("images/achievements/achievementStatusNone.png");
trophyStatus.setColor(255f, 255f, 255f, 0.55f);
}
trophyStatus.addListener(new ChangeListener() {
@Override
public void changed(ChangeEvent event, Actor actor) {
// Open score details dialog
entity.getEvents().trigger(ScoreDetailsDialog.OPEN_SCORE_DETAILS_DIALOG, score);
}
});
return trophyStatus;
}