private boolean canBeCandidate(IPlayer player, ICity town) { ESocialRank rank = player.getRank(); if (rank == ESocialRank.COUNCILMAN || rank == ESocialRank.PATRICIAN || rank == ESocialRank.MAYOR || rank == ESocialRank.ALDERMAN) { final ICity hometown = player.getHometown(); return town.equals(hometown); } return false; }
public Optional<ISpouseData> calculateSpouseDeath(IPlayer player, ICity city) { Optional<ISpouseData> killedSpouse = Optional.empty(); if (player.getHometown().equals(city) && player.getSpouseData().isPresent()) { if (rnd.nextInt(5) == 0) { killedSpouse = Optional.of(player.getSpouseData().get()); player.spouseDies(); } } return killedSpouse; } /**
/** * Petition can be requested in the hometown if the player is counsilman, patrician or mayor, or in any city if the player is alerman. * @param town for which the petition capability is checked * @param player for whom to check the petition capability * @return true if the player can pose a petition */ private boolean canPosePetition(ICity town, IPlayer player) { ESocialRank rank = player.getRank(); if (cityHallAccessor.getCityHall(town).getPetition().isPresent()) { return false; // Only allow one petition at a time } if (rank == ESocialRank.COUNCILMAN || rank == ESocialRank.PATRICIAN || rank == ESocialRank.MAYOR) { final ICity hometown = player.getHometown(); if (town.equals(hometown)) { return true; } } return rank == ESocialRank.ALDERMAN; }
@VisibleForTesting double getNegativeReputationFactor(IPlayer player, ICity city) { if (city.equals(player.getHometown())) { return 1; } // Building Permission if (!city.hasBuildingPermission(player)) { return 0.05; } if (!player.findTradingOffice(city).isPresent()) { return 0.12; } int nbBuildings = player.findBuildings(city).size(); if (nbBuildings == 1) { // trading office return 0.18; } if (nbBuildings <= 10) { return 0.3; } if (nbBuildings <= 20) { return 0.6; } if (nbBuildings <= 30) { return 0.8; } return 1; }
private boolean isReputationTooLow(IPlayer player) { ESocialRank rank = player.getRank(); ESocialRank nextRank = rank.getNextRank(); double remapedRep = repCalculator.remapReputation(player.getHometown(), player); return remapedRep < nextRank.getSocialRank(); }
double remapedPopulaity = repCalculator.calculateWareReputation(player.getHometown(), player); if (remapedPopulaity<nextRank.getSocialRank()){ needReputation=true;
@VisibleForTesting void handleChildDeathEvent(boolean catastopheEvent, IPlayer player, boolean childBirth, boolean spouseDeath) { if (!catastopheEvent && !spouseDeath && !childBirth) { int childDeathLimit = calculateChildDeathLimit(player); boolean childDeath = !spouseDeath && childDeathLimit > 0 && rnd.nextInt(childDeathLimit) == 0; if (childDeath) { List<IChild> nonAdults = filterNonAdultChildren(player); IChild child = nonAdults.get(rnd.nextInt(nonAdults.size())); ChildDeathState state = ChildDeathState.builder() .location(player.getHometown().getName()) .date(date.getCurrentDate()) .child(child) .build(); List<IChild> children = player.getChildren(); children.remove(child); eventService.postToHumanPlayer(state, player, "ch.sahits.game.openpatrician.engine.event.EventEngine.message.childDeath.titl"); } } }
public ITradingOffice createTradingOffice(IPlayer owner, ICity city, int value) { for (IBuilding building : city.getBuildings()) { if (building.getOwner()==owner && building instanceof ITradingOffice){ throw new IllegalStateException("The player may only obtain one trading office per city"); } } IStorage storage = createStorage(owner, city); IBalanceSheet lastWeek; IBalanceSheet thisWeek; ICity hometown = owner.getHometown(); if (hometown.equals(city)) { lastWeek = interactionFactory.createInitialBalanceSheet(city, owner); thisWeek = interactionFactory.createBalanceSheetFromPreviousWeek((BalanceSheet) lastWeek); } else { Optional<ITradingOffice> mainOffice = owner.findTradingOffice(hometown); Preconditions.checkArgument(mainOffice.isPresent(), "There has to be a trading office in the hometown"); lastWeek = mainOffice.get().getBalanceLastWeek(); thisWeek = mainOffice.get().getCurrentWeek(); } TradingOffice office = (TradingOffice) context.getBean("tradingOffice", new Object[]{owner, city, value, storage, lastWeek, thisWeek}); city.build(office); clientServerEventBus.post(new BuildingFinished(office, owner, city)); return office; } }
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; }
for (IPlayer opponent : residentOponents) { String sb = messageSource.getMessage("ch.sahits.game.openpatrician.display.dialog.TavernBurglarDialog.list", new Object[]{modelTranslator.getLocalDisplayName(opponent.getCareerLevel()), modelTranslator.getLocalDisplayName(opponent.getRank()), opponent.getName(), opponent.getLastName(), opponent.getHometown().getName()}, locale.getCurrentLocal()); DecoratedText text = textFactory.createDecoratedText(sb, new HashMap<>()); text.setUserData(opponent);
Optional<ITradingOffice> optMainOffice = player.findTradingOffice(player.getHometown()); Preconditions.checkArgument(optMainOffice.isPresent(), "There must be a trading office in the hometown."); IBalanceSheet balanceSheet = optMainOffice.get().getCurrentWeek();
public void initializeMapImage(IPlayer player) { Image mapImage = imageUtilities.createMapWithCities(map, player); Dimension2D dim = map.getDimension(); scale = 192 / dim.getHeight(); double widthOrigImg = 236 / scale; double xlocation = player.getHometown().getCoordinates().getX(); double x = Math.max(0, xlocation - widthOrigImg/2); Rectangle2D viewport = new Rectangle2D(x, 0, widthOrigImg, dim.getHeight()); final Image transferableMap = mapImage; Platform.runLater(() -> { imgView.setViewport(viewport); imgView.setImage(transferableMap); for (ICity city : map.getCities()) { if (city.getCoordinates().getX() >= x && city.getCoordinates().getX() <= x + widthOrigImg) { List<INavigableVessel> ships = player.findShips(city); if (!ships.isEmpty()) { drawShipPresenceInCity(city, x); } } } }); }
.location(player.getHometown().getName()) .date(date.getCurrentDate()) .male(male) .location(player.getHometown().getName()) .date(date.getCurrentDate()) .build();
@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()); } }
break; if (player.getHometown().equals(birthPlace)) { popYour = Math.max(popYour, popHer); conYour = Math.max(conYour, conHer);
modelTranslations.getLocalDisplayName(member.getRank()), member.getName(), member.getLastName(), member.getHometown().getName(), modelTranslations.toDisplayString(foundingDate), oldest.getCity().getName()}, locale.getCurrentLocal()); DecoratedText text = textFactory.createDecoratedText(template, new HashMap<>());
company.updateCashDirectly(-(taxAmount + propertyTaxPerResedident)); ICity hometown = resident.getHometown(); Optional<ITradingOffice> optOffice = resident.findTradingOffice(hometown); Preconditions.checkArgument(optOffice.isPresent(), "Trading office in hometown must be present");
ship.setLocation(player.getHometown().getCoordinates()); ship.setOwner(player); player.addShip(ship); updateReputation += spouse.getConnectionsInHerHomeTown() * 2 * repConnectionCounsilman; rep.update(updateReputation); rep = player.getHometown().getReputation(player); updateReputation = (int)(0.5 * spouse.getPopularityInYourHomeTown()); updateReputation += spouse.getConnectionsInYourHomeTown() * repConnectionCounsilman; .location(player.getHometown().getName()) .date(date.getCurrentDate()) .ship(ship)
private EventHandler<MouseEvent> createAcceptOffer() { return mouseEvent -> { try { // post DisplayStateMessage LocalDateTime weddingDate = date.getCurrentDate().plusDays(21); MarriageAnnouncementState announcementState = MarriageAnnouncementState.builder() .date(date.getCurrentDate()) .player(state.getPlayer()) .spouse(state.getSpouse()) .weddingDate(weddingDate) .build(); DisplayStateMessage message = new DisplayStateMessage("ch.sahits.game.openpatrician.engine.event.EventEngine.message.marriage.title", announcementState); clientServerEventBus.post(new TargetedEvent((IHumanPlayer) state.getPlayer(), message)); // TODO: 12.03.17 why do we have a targeted event here? we can sending it directly, as the user is the target. clientEventBus.post(announcementState); // Schedule the celebration CelebrationTask task = taskFactory.getMarriageCelebrationEvent(weddingDate, state.getPlayer(), state.getPlayer().getHometown(), state.getSpouse()); taskList.add(task); } catch (RuntimeException e) { logger.error("Failed to order marriage celebrations", e); } }; } }
if (player instanceof IHumanPlayer) { SocialAdvancementState state = SocialAdvancementState.builder() .location(player.getHometown().getName()) .rank(nextRank) .date(date.getCurrentDate()) SocialAdvancementDeficitState state = SocialAdvancementDeficitState.builder() .date(date.getCurrentDate()) .location(player.getHometown().getName()) .money(moneyMissing) .reputation(reputationLow) ICareer career = repCalculator.calculateCareer(player.getHometown(), player); player.setCareerLevel(career); for (ICity city : map.getCities()) {