@VisibleForTesting double calculateDelta(ESocialRank rank) { if (rank == ESocialRank.ALDERMAN) { return calculateDelta(ESocialRank.MAYOR); } double upperEnd = rank.getNextRank().getSocialRank(); return upperEnd - rank.getSocialRank(); }
private boolean isReputationTooLow(IPlayer player) { ESocialRank rank = player.getRank(); ESocialRank nextRank = rank.getNextRank(); double remapedRep = repCalculator.remapReputation(player.getHometown(), player); return remapedRep < nextRank.getSocialRank(); }
if (remapedPopulaity<nextRank.getSocialRank()){ needReputation=true;
private boolean isNextRankAchievable(IPlayer player){ ESocialRank rank = player.getRank(); if (rank==ESocialRank.PATRICIAN || rank==ESocialRank.MAYOR || rank==ESocialRank.ALDERMAN){ return false; } final ICompany company = player.getCompany(); ICity homeTown = player.getHometown(); long compValue = company.getCompanyValue(); ESocialRank nextRank = rank.getNextRank(); double remapedRep = repCalculator.remapReputation(homeTown, player); if (compValue>=nextRank.getCompanyValue() && remapedRep>=nextRank.getSocialRank()){ if (nextRank==ESocialRank.COUNCILMAN){ IGuild guild = guildList.findGuild(homeTown).get(); return guild.getMembers().contains(player); } return true; } return false; }
/** * Calculate the current career level of the player. * @param city in which to calculate hte career level * @param player for whom to calculate the career level * @return career level of the player. */ public ICareer calculateCareer(ICity city, IPlayer player) { ESocialRank rank = player.getRank(); int nbAvailableLevels = getAvailableLevels(rank, player); double totalReputationDelta = calculateDelta(rank); double reputation = remapReputation(city, player); double startLevelRep = rank.getSocialRank(); double reqiredRepTillNextRank = Math.max(reputation - startLevelRep, 0); double percentage = reqiredRepTillNextRank / totalReputationDelta; int index = (int) Math.rint(nbAvailableLevels * percentage); if (player.getCriminalDrive() > 0) { return EMilitantCareer.values()[rank.getCareerLowerOffset()+index]; } else { return EEconomicCareer.values()[rank.getCareerLowerOffset()+index]; } } @VisibleForTesting
if (!city.hasBuildingPermission(player)) { double rep = repCalculator.remapReputation(city, player); if (rep > ESocialRank.BARGAINER.getSocialRank()) { city.addBuildingPermission(player); BuildingPermissionState state = BuildingPermissionState.builder()