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
@VisibleForTesting int getAvailableLevels(ESocialRank rank, IPlayer player) { int total; if (player.getCriminalDrive() > 0) { total = EMilitantCareer.values().length; } else { total = EEconomicCareer.values().length; } total -= rank.getCareerLowerOffset(); total -= rank.getCareerUpperOffset(); return total; }
@VisibleForTesting double calculateDelta(ESocialRank rank) { if (rank == ESocialRank.ALDERMAN) { return calculateDelta(ESocialRank.MAYOR); } double upperEnd = rank.getNextRank().getSocialRank(); return upperEnd - rank.getSocialRank(); }
private boolean notEnoughMoney(IPlayer player) { ESocialRank rank = player.getRank(); ESocialRank nextRank = rank.getNextRank(); final ICompany company = player.getCompany(); long compValue = company.getCompanyValue(); return compValue < nextRank.getCompanyValue(); }
private void createNewLoanRequest(ILoaner loaner, ICity city) { LocalDateTime now = date.getCurrentDate(); int duration = rnd.nextInt(50) + 10; int rankIndexBound = ESocialRank.values().length - 2; // no mayor or alderman final int rankIndex = rnd.nextInt(rankIndexBound); ESocialRank rank = ESocialRank.values()[rankIndex]; Citizen citizen = new Citizen(lastNameLoader.getRandomName(), maleFirstNameLoader.getRandomName(), rank, city); int amount = (rnd.nextInt(10000) + 1000) * (rankIndex + 1); LoanRequest request = LoanRequest.builder() .citizen(citizen) .durationInWeeks(duration) .issued(now) .sum(amount) .build(); loaner.add(request); }
private boolean isReputationTooLow(IPlayer player) { ESocialRank rank = player.getRank(); ESocialRank nextRank = rank.getNextRank(); double remapedRep = repCalculator.remapReputation(player.getHometown(), player); return remapedRep < nextRank.getSocialRank(); }
OpenPatricianLargeWaxButton withdraw = new OpenPatricianLargeWaxButton(template); withdraw.getStyleClass().add("actionButton"); if (!city.getPlayer().getRank().equals(ESocialRank.MAYOR) || !city.getPlayer().getHometown().equals(city.getCity())) { withdraw.setVisible(false);
/** * Take out a loan. * @param loaner from which to take the loan * @param proposal selected loan * @param debitor who is taking the loan. */ public void takeOutLoan(ILoaner loaner, ILoanProposal proposal, IPlayer debitor, ICity city) { // TODO: andi 6/12/16 the proposol might be on that is offed by a player and not a citizen LocalDateTime now = date.getCurrentDate(); ESocialRank rank = ESocialRank.values()[rnd.nextInt(ESocialRank.values().length-2)]; // Exclude Mayor and Alderman ICreditor creditor = new Citizen(lastNameLoader.getRandomName(), firstNameLoader.getRandomName(), rank, city); LocalDateTime dueDate = now.plusWeeks(proposal.getDurationInWeeks()); Debt debt = Debt.builder() .creditor(creditor) .amount(proposal.getAmount()) .dueDate(dueDate) .interest(proposal.getInterest()) .debitor(debitor) .loanTakeOut(now) .build(); loaner.addDebt(debt); loaner.getLoanProposals().remove(proposal); if (debitor instanceof IHumanPlayer) { debitor.getCompany().updateCash(proposal.getAmount()); } else { debitor.getCompany().updateCashDirectly(proposal.getAmount()); } }
if (rank!=ESocialRank.ALDERMAN && rank!=ESocialRank.MAYOR){ ESocialRank nextRank = rank.getNextRank(); boolean needFortune = false; if (player.getCompany().getCompanyValue()<nextRank.getCompanyValue()){ needFortune=true; if (remapedPopulaity<nextRank.getSocialRank()){ needReputation=true;
ESocialRank rank = player.getRank(); if (isNextRankAchievable(player)){ ESocialRank nextRank = rank.getNextRank(); player.updateRank(nextRank); if (player instanceof IHumanPlayer) { if (!city.hasBuildingPermission(player)) { double rep = repCalculator.remapReputation(city, player); if (rep > ESocialRank.BARGAINER.getSocialRank()) { city.addBuildingPermission(player); BuildingPermissionState state = BuildingPermissionState.builder()