public void update(GameInfo gameInfo) { int races = gameInfo.getLocalPlayerRaces(); CampaignLevel campaignLevel = gameInfo.getCampaignLevel(); if (campaignLevel != null && gameInfo.won()) { int stars = gameInfo.getStarCount(); campaignLevel.update(stars, gameInfo.getComputerLevel()); } long xp = increaseXP(gameInfo); for (int race : Races.asArray(races)) { processRace(gameInfo, race, xp); } if (gameInfo.won()) wins++; else losses++; if (longestGame < gameInfo.getLength()) longestGame = gameInfo.getLength(); if (shortestGame > gameInfo.getLength()) shortestGame = gameInfo.getLength(); if (highestLevelBeaten < gameInfo.getComputerLevel()) highestLevelBeaten = gameInfo.getComputerLevel(); if (highestScore < xp) highestScore = xp; for (Achievement achievement : achievements) { if (achievement.executeIfNotCompleted(this)) { // add achievement to list if it was executed for the first time gameInfo.addAchievement(achievement); } } }