@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(); }
@Override public void run() { city.getReputation(player).update(7*amountBeggers); } }
/** * 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
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(); }
@PostConstruct private void initializeDialog() { String letterDate = modelTranslations.toDisplayString(state.getDate()); String tillDate = modelTranslations.toDisplayStringLongFormat(state.getWeddingDate()); addDecoratedText("letter.location.date", "dateLocation", Pos.CENTER_RIGHT, state.getSpouse().getBirthPlace().getName(), letterDate); addVerticalSpacer(20); addDecoratedText("letter.congratulations", "salutation", Pos.CENTER); addVerticalSpacer(20); addDecoratedText("ch.sahits.game.openpatrician.display.dialog.event.MarriageAnnouncementDialog.paragraph1", "marriage", state.getSpouse().getName(), state.getSpouse().getLastName(), tillDate); addDecoratedText("ch.sahits.game.openpatrician.display.dialog.event.MarriageAnnouncementDialog.paragraph2", "supplies", state.getPlayer().getHometown().getName()); } }
/** * Remap the linear reputation stored in a city to value that are used in * ranks. * @param city for which the reputation is remaped * @param player for which the reputation is remapped * @return reputation of the player in the city */ public double remapReputation(ICity city, IPlayer player) { int reputation = city.getReputation(player).getPopularity(); return reputation < 1 ? 0 : Math.log10(reputation); }
@PostConstruct private void initializeDialog() { String letterDate = modelTranslations.toDisplayString(state.getDate()); int age = dateService.getAge(state.getChild().getBirthDate()); addDecoratedText("letter.location.date", "dateLocation", Pos.CENTER_RIGHT, state.getLocation(), letterDate); addVerticalSpacer(20); addDecoratedText("letter.dairy.entry", "diryEntry"); addVerticalSpacer(20); addDecoratedText("ch.sahits.game.openpatrician.display.dialog.event.ChildDeathDialog.childDeath", "childDeath", state.getChild().getName(), age); } }
@PostConstruct private void initializeDialog() { String letterDate = modelTranslations.toDisplayString(state.getDate()); addDecoratedText("letter.location.date", "dateLocation", Pos.CENTER_RIGHT, state.getLocation(), letterDate); addVerticalSpacer(20); addDecoratedText("ch.sahits.game.openpatrician.display.dialog.event.FireDialog.fire", "fire", state.getLocation(), state.getDestroyedBuildings(), state.getDeathtoll()); if (state.getKilledSpouse().isPresent()) { ISpouseData spouse = state.getKilledSpouse().get(); addDecoratedText("ch.sahits.game.openpatrician.display.dialog.event.FireDialog.wiveDeath", "wiveDeath", spouse.getName(), spouse.getLastName()); } } }
private DecoratedText getCandidateRow(ICitizen candidate) { Object[] args; String template; DecoratedText text; if (candidate instanceof IPlayer) { IPlayer p = (IPlayer) candidate; args = new Object[]{modelTranslator.getLocalDisplayDistinctArticle(p.getPersonalData().isMale(), true), modelTranslator.getLocalDisplayName(p.getCareerLevel()), modelTranslator.getLocalDisplayName(p.getRank()), p.getName()+" "+p.getLastName()}; } else { args = new Object[]{modelTranslator.getLocalDisplayDistinctArticle(true, true), modelTranslator.getLocalDisplayName(EEconomicCareer.SMART), modelTranslator.getLocalDisplayName(candidate.getRank()), candidate.getName()+" "+candidate.getLastName()}; } template = messageSource.getMessage("ch.sahits.game.openpatrician.display.dialog.cityhall.TownInfoNotice.candidate", args, locale.getCurrentLocal()); text = textFactory.createDecoratedText(template, new HashMap<>()); return text; }
private List<IChild> filterNonAdultChildren(IPlayer player) { return player.getChildren().stream() .filter(child -> dateService.getAge(child.getBirthDate()) < 18) .collect(Collectors.toList()); }
private String getPrefix(ISpouseData spouseData){ if (spouseData.isMale()){ return messageSource.getMessage("ch.sahits.game.openpatrician.display.dialog.PersonalDialog.malePrefix", new Object[]{}, locale.getCurrentLocal()); } else { return messageSource.getMessage("ch.sahits.game.openpatrician.display.dialog.PersonalDialog.femalePrefix", new Object[]{}, locale.getCurrentLocal()); } }
private String getReputationText(IReputation reputation) { int repDiff = reputation.getReputationDifference(); StringBuilder sb = new StringBuilder(); if (repDiff<0){ // reputation has sunk if (repDiff<=-10 && repDiff>-25){ sb.append(messageSource.getMessage("ch.sahits.game.openpatrician.display.dialog.PersonalDialog.sunkenRep1", new Object[]{}, locale.getCurrentLocal())); } else if (repDiff>-10){ sb.append(messageSource.getMessage("ch.sahits.game.openpatrician.display.dialog.PersonalDialog.sunkenRep2", new Object[]{}, locale.getCurrentLocal())); } else { sb.append(messageSource.getMessage("ch.sahits.game.openpatrician.display.dialog.PersonalDialog.sunkenRep3", new Object[]{}, locale.getCurrentLocal())); } } else if (repDiff>0){ // reputation has risen if (repDiff>=10 && repDiff<25){ sb.append(messageSource.getMessage("ch.sahits.game.openpatrician.display.dialog.PersonalDialog.risenRep1", new Object[]{}, locale.getCurrentLocal())); } else if (repDiff<10){ sb.append(messageSource.getMessage("ch.sahits.game.openpatrician.display.dialog.PersonalDialog.risenRep2", new Object[]{}, locale.getCurrentLocal())); } else { sb.append(messageSource.getMessage("ch.sahits.game.openpatrician.display.dialog.PersonalDialog.risenRep3", new Object[]{}, locale.getCurrentLocal())); } } else { sb.append(messageSource.getMessage("ch.sahits.game.openpatrician.display.dialog.PersonalDialog.unchangedRep", new Object[]{}, locale.getCurrentLocal())); } return sb.toString(); } /**
private boolean isReputationTooLow(IPlayer player) { ESocialRank rank = player.getRank(); ESocialRank nextRank = rank.getNextRank(); double remapedRep = repCalculator.remapReputation(player.getHometown(), player); return remapedRep < nextRank.getSocialRank(); }
@PostConstruct private void initializeDialog() { String letterDate = modelTranslations.toDisplayString(state.getDate()); String since = modelTranslations.toDisplayString(state.getSince()); addDecoratedText("letter.location.date", "dateLocation", Pos.CENTER_RIGHT, state.getLocation(), letterDate); addVerticalSpacer(20); addDecoratedText("ch.sahits.game.openpatrician.display.dialog.event.PlagueDialog.plauge", "plauge", state.getLocation(), since, state.getDeathtoll()); if (state.getKilledSpouse().isPresent()) { ISpouseData spouse = state.getKilledSpouse().get(); addDecoratedText("ch.sahits.game.openpatrician.display.dialog.event.FireDialog.wiveDeath", "wiveDeath", spouse.getName(), spouse.getLastName()); } } }
private DecoratedText getCandidateRow(ICitizen candidate) { Object[] args; String template; DecoratedText text; if (candidate instanceof IHumanPlayer) { IPlayer p = (IPlayer) candidate; args = new Object[]{modelTranslator.getLocalDisplayDistinctArticle(p.getPersonalData().isMale(), true), modelTranslator.getLocalDisplayName(p.getCareerLevel()), modelTranslator.getLocalDisplayName(p.getRank()), p.getName()+" "+p.getLastName()}; } else { args = new Object[]{modelTranslator.getLocalDisplayDistinctArticle(true, true), modelTranslator.getLocalDisplayName(EEconomicCareer.SMART), modelTranslator.getLocalDisplayName(candidate.getRank()), candidate.getName()+" "+candidate.getLastName()}; } template = messageSource.getMessage("ch.sahits.game.openpatrician.display.dialog.cityhall.TownInfoNotice.candidate", args, locale.getCurrentLocal()); text = textFactory.createDecoratedText(template, new HashMap<>()); return text; }
@VisibleForTesting Runnable createRemitRunnable(final IDebt debt) { return () -> { ICreditor creditor = debt.getCreditor(); if (creditor instanceof IPlayer) { ICity city = debt.getDebitor().getHometown(); IReputation reputation = city.getReputation((IPlayer) creditor); reputation.update(500); } }; } @VisibleForTesting
private void updateReputationDueToPirateDefeat(INavigableVessel pirateVessel, INavigableVessel playerVessel) { if (pirateVessel.getOwner() instanceof ISeaPirate && playerVessel.getOwner() instanceof IPlayer) { if (!piratesState.getAllPirates().contains(pirateVessel.getOwner())) { IPlayer player = (IPlayer) playerVessel.getOwner(); for (ICity city : map.getCities()) { city.getReputation(player).update(15); // If the distruction was a Alderman task the increase is larger } } } } }
private EventHandler<MouseEvent> getAction() { return evt -> { try { final ICompany company = city.getPlayer().getCompany(); company.updateCash(-moneyTransfer.getAmount()); city.getCity().getReputation(city.getPlayer()).update(moneyTransfer.getAmount() / 1000); executeOnCloseButtonClicked(); } catch (RuntimeException e) { logger.error("Failed to make a donation to the city", e); } }; }