private void postMayoralElectionMessage(DisplayMessage msg) { for (ICityHall cityHall : cityHalls) { ICitizen mayor = cityHall.getMayor(); if (mayor instanceof IHumanPlayer) { TargetedEvent displayMessage = new TargetedEvent((IHumanPlayer)mayor, msg); clientServerEventBus.post(displayMessage); } } }
@Override public void run() { if (player instanceof IHumanPlayer) { DisplayStateMessage message = new DisplayStateMessage(messageKey, state, messageParams); clientServerEventBus.post(new TargetedEvent((IHumanPlayer) player, message)); } } }
/** * Post a message that will end up in the message queue. * @param state dialog state for the display message * @param player player to whom the message is posted * @param messageKey text key of the display state message * @param messageParams message parameters for the message */ public void postToHumanPlayer(IDialogState state, IPlayer player, String messageKey, Object... messageParams) { if (player instanceof IHumanPlayer) { DisplayStateMessage message = new DisplayStateMessage(messageKey, state, messageParams); clientServerEventBus.post(new TargetedEvent((IHumanPlayer) player, message)); } } }
public void load(String savegameName) { timerEventBus.post(new PauseGame()); Thread.yield(); String fileName = savegameDir + File.separator + savegameName + SAVEGAME_FILE_EXTENSTION; loadAndSave.restore(fileName); clientServerEventBus.post(new GameStateChange(EGameStatusChange.GAME_LOADED)); PlayerList players = context.getBean(PlayerList.class); for (IPlayer player : players) { if (player instanceof IHumanPlayer) { clientServerEventBus.post(new TargetedEvent((IHumanPlayer) player, new MapUpdateCityAdd(null, player))); } } }
@Subscribe public void handleBuildingNotAuction(BuildingNotAuctioned event) { if (event.getNewOwner() instanceof IHumanPlayer) { // Post targeted message ICity city = event.getBuilding().getCity(); DisplayMessage msg = new DisplayMessage("ch.sahits.game.openpatrician.engine.player.HumanPlayerEngine.buildingNotAuctioned", city.getName()); TargetedEvent targetMsg = new TargetedEvent((IHumanPlayer) event.getNewOwner(), msg); clientServerEventBus.post(targetMsg); } } }
@Subscribe public void handleBuildingAuctionFinished(BuildingAuctionFinished event) { IPlayer owner = event.getNewOwner(); if (owner instanceof IHumanPlayer) { // Post targeted message IBuilding building = event.getBuilding(); building.setOwner(owner); ICity city = building.getCity(); DisplayMessage msg = new DisplayMessage("ch.sahits.game.openpatrician.engine.player.HumanPlayerEngine.buildingAuctioned", city.getName()); TargetedEvent targetMsg = new TargetedEvent((IHumanPlayer) owner, msg); clientServerEventBus.post(targetMsg); } } @Subscribe
private void updateFightingSkill(IShip ship) { ICaptain captain = ship.getCaptian().get(); ship.getCaptian().get().updateFightWon(); if (ship.getCaptian().get().upgradeToNextFightingLevel() && ship.getOwner() instanceof IHumanPlayer) { DialogTemplateParameterSupplier parameterSupplier = new DialogTemplateParameterSupplier(new Object[]{ship.getCaptian().get().getName(), ship.getName(), captain.getSalary()}); DialogTemplate template = dialogTemplateFactory.createDialogTemplate(EDialogTemplateType.CAPTAIN_UPGRADE, parameterSupplier); DisplayTemplateMessage message = new DisplayTemplateMessage("ch.sahits.game.openpatrician.model.people.impl.CaptainState.captainUpgrade.title", template); TargetedEvent tagetDisplayMsg = new TargetedEvent((IHumanPlayer)ship.getOwner(), message); clientServerEventBus.post(tagetDisplayMsg); } }
@Subscribe public void handleShipNotAuction(ShipNotAuctioned event) { IShipOwner owner = event.getShip().getOwner(); if (owner instanceof IHumanPlayer) { // Post targeted message IShip ship = event.getShip(); ((IHumanPlayer) owner).addShip(ship); Optional<ICity> city = shipService.findCity(ship); DisplayMessage msg = new DisplayMessage("ch.sahits.game.openpatrician.engine.player.HumanPlayerEngine.shipNotAuctioned", ship.getName(), city.get().getName()); TargetedEvent targetMsg = new TargetedEvent((IHumanPlayer) event.getNewOwner(), msg); clientServerEventBus.post(targetMsg); } } @Subscribe
@Subscribe public void handleShipAuctionFinished(ShipAuctionFinished event) { IPlayer owner = event.getNewOwner(); if (owner instanceof IHumanPlayer) { IShip ship = event.getShip(); ship.setOwner(owner); owner.addShip(ship); // Post targeted message Optional<ICity> city = shipService.findCity(ship); DisplayMessage msg; msg = city.map(iCity -> new DisplayMessage("ch.sahits.game.openpatrician.engine.player.HumanPlayerEngine.shipAuctioned", ship.getName(), iCity.getName())) .orElseGet(() -> new DisplayMessage("ch.sahits.game.openpatrician.engine.player.HumanPlayerEngine.shipAuctionedOnSea", ship.getName())); TargetedEvent targetMsg = new TargetedEvent((IHumanPlayer) owner, msg); clientServerEventBus.post(targetMsg); } } @Subscribe
void createConvoy(IBlockade blockade, ICity city) { List<IShip> allShips = blockade.getShips(); IConvoy convoy = shipFactory.getConvoy(allShips.get(0), false); for (int i = 1; i < allShips.size(); i++) { IShip ship = allShips.get(i); convoy.addShip(ship); ship.parentShipProperty().setValue(convoy.getOrlegShip()); } for (IShip ship : allShips) { ship.setAvailable(false); IPlayer owner = (IPlayer) ship.getOwner(); if (owner instanceof IHumanPlayer) { clientServerEventBus.post(new TargetedEvent((IHumanPlayer) owner, new ShipBecomesUnavailableEvent(ship, city))); } owner.removeSelectableVessel(ship); } blockade.setConvoy(convoy); } }
@Override public void run() { ship.setLocation(location); locationTracker.add(ship); shipyard.removeCompletedConstruction(ship); if (owner instanceof IHumanPlayer) { DisplayMessage msg = new DisplayMessage("ch.sahits.game.openpatrician.engine.event.task.ShipBuildTask.message", new Object[]{type, ship.getName()}); TargetedEvent displayMessage = new TargetedEvent((IHumanPlayer) owner, msg); clientServerEventBus.post(displayMessage); } else { aiPlayerEngine.handleShipConstructionFinished(ship, (IAIPlayer) owner); } } /**
@VisibleForTesting Runnable createPawnRunnable(final IDebt debt, final ICity city) { return () -> { if (debt.getDebitor() instanceof IHumanPlayer) { pawnFromHumanDebitor(debt, city); // Add task for the following day to collect the money } else if (debt.getCreditor() instanceof IHumanPlayer){ int value = rnd.nextInt(debt.getAmount()/2) + debt.getAmount(); value = (int) Math.min(value, debt.getAmount()*debt.getInterest()); ((IPlayer)debt.getCreditor()).getCompany().updateCash(value); ICitizen debitor = debt.getDebitor(); DisplayMessage msg = new DisplayMessage("ch.sahits.game.openpatrician.engine.land.city.LoanerEngine.pawnMsg1", new Object[]{debitor.getName(), debitor.getLastName(), value}); TargetedEvent message = new TargetedEvent((IHumanPlayer) debt.getCreditor(), msg); clientServerEventBus.post(message); } }; } @VisibleForTesting
@Override public void run() { ship.repair(); shipyard.removeCompletedRepair(ship); ship.setAvailable(true); city.getPlayersShips().add(ship); if (city.getPlayersShips().size() == 1) { city.activateShip(ship); } final IShipOwner owner = ship.getOwner(); if (owner instanceof IHumanPlayer) { DisplayMessage msg = new DisplayMessage("ch.sahits.game.openpatrician.engine.event.task.RepairTask.message", new Object[]{ship.getName()}); TargetedEvent displayMessage = new TargetedEvent((IHumanPlayer) owner, msg); clientServerEventBus.post(displayMessage); } else { clientServerEventBus.post(new RepairFinishedEvent(ship)); } } }
@Override public boolean execute(ICity city) { if (ignoreEventCity()) { // time has passed and passenger will leave. EDialogTemplateType templateType = resolveType(dialogTemplateType, false); DialogTemplate template = dialogTemplateFactory.createDialogTemplate(templateType, dialogParameterSupplier); DisplayTemplateMessage message = new DisplayTemplateMessage(getMessageBoardTitleKey(templateType), template, getMessageBoardTitleParameters(templateType, city)); TargetedEvent tagetDisplayMsg = new TargetedEvent((IHumanPlayer)shipsOwner, message); clientServerEventBus.post(tagetDisplayMsg); } else { // Successful arrival at destination if (shipsOwner instanceof IHumanPlayer) { shipsOwner.getCompany().updateCash(premiumCalculator.get()); } else { shipsOwner.getCompany().updateCashDirectly(premiumCalculator.get()); } EDialogTemplateType templateType = resolveType(dialogTemplateType, true); DialogTemplate template = dialogTemplateFactory.createDialogTemplate(templateType, dialogParameterSupplier); DisplayTemplateMessage message = new DisplayTemplateMessage(getMessageBoardTitleKey(templateType), template, getMessageBoardTitleParameters(templateType, city)); TargetedEvent tagetDisplayMsg = new TargetedEvent((IHumanPlayer)shipsOwner, message); clientServerEventBus.post(tagetDisplayMsg); } ((IShip) getShip()).leavePassenger(); unregisterEventBus(); return true; }
@Override public void run() { IHumanPlayer debitor = (IHumanPlayer) debt.getDebitor(); ICompany company = debitor.getCompany(); int requiredAmount = debt.getAmount(); int amount = (int) Math.min(requiredAmount, company.getCash()); company.updateCash(-amount); if (debt.getCreditor() instanceof IPlayer) { if (debt.getCreditor() instanceof IHumanPlayer) { ((IPlayer) debt.getCreditor()).getCompany().updateCash(amount); } else { ((IPlayer) debt.getCreditor()).getCompany().updateCashDirectly(amount); } if (debt.getCreditor() instanceof IHumanPlayer) { DisplayMessage msg = new DisplayMessage("ch.sahits.game.openpatrician.engine.land.city.LoanerEngine.paybackAfterShipAuction", new Object[]{debitor.getName(), debitor.getLastName(), amount}); TargetedEvent message = new TargetedEvent((IHumanPlayer) debt.getCreditor(), msg); clientServerEventBus.post(message); } } } }
@Override public void handleShipEntersPort(ShipEntersPortEvent event) { super.handleShipEntersPort(event); LocalDateTime now = date.getCurrentDate(); if (now.isAfter(deadline)) { if (player instanceof IHumanPlayer) { DialogTemplateParameterSupplier parameterSupplier = new DialogTemplateParameterSupplier(new Object[]{getShip().getName(), event.getCity().getName(), clientServerFactory.dateSupplier()}); DialogTemplate template = dialogTemplateFactory.createDialogTemplate(EDialogTemplateType.COURIER_SERVICE_FINISHED_UNSUCCESSFUL, parameterSupplier); DisplayTemplateMessage message = new DisplayTemplateMessage("ch.sahits.game.event.handler.impl.NextCourierPatrolStation.unreliable", template); TargetedEvent tagetDisplayMsg = new TargetedEvent((IHumanPlayer) player, message); clientServerEventBus.post(tagetDisplayMsg); } ((IShip)getShip()).leavePassenger(); clientServerEventBus.unregister(this); } }
@Override public void run() { ICompany company = debitor.getCompany(); int requiredAmount = debt.getAmount(); int amount = (int) Math.min(requiredAmount, company.getCash()); if (debitor instanceof IHumanPlayer) { company.updateCash(-amount); } else { company.updateCashDirectly(-amount); } if (debt.getCreditor() instanceof IPlayer) { if (debt.getCreditor() instanceof IHumanPlayer) { ((IPlayer) debt.getCreditor()).getCompany().updateCash(amount); } else { ((IPlayer) debt.getCreditor()).getCompany().updateCashDirectly(amount); } if (debt.getCreditor() instanceof IHumanPlayer) { DisplayMessage msg = new DisplayMessage("ch.sahits.game.openpatrician.engine.land.city.LoanerEngine.paybackAfterWithoutAuction", new Object[]{debitor.getName(), debitor.getLastName(), amount}); TargetedEvent message = new TargetedEvent((IHumanPlayer) debt.getCreditor(), msg); clientServerEventBus.post(message); } } } }
void dissolveConvoy(IBlockade blockade, ICity city, ICity blockadedCity) { IConvoy convoy = blockade.getBlockadeConvoy(); for (IShip ship : convoy.getShips()) { ship.setAvailable(true); IShipOwner owner = ship.getOwner(); convoy.removeShip(ship); ship.parentShipProperty().setValue(null); if (owner instanceof IHumanPlayer) { DisplayMessage msg = new DisplayMessage("ch.sahits.game.openpatrician.engine.sea.BlockadeEngine.blockadesissolve", new Object[]{blockadedCity.getName(), ship.getName(), city.getName()}); TargetedEvent targetMsg = new TargetedEvent((IHumanPlayer) owner, msg); clientServerEventBus.post(targetMsg); } if (owner instanceof IPlayer) { IPlayer player = (IPlayer) owner; player.addSelectableVessel(ship); } clientServerEventBus.post(new ShipEntersPortEvent(ship, city)); } }
/** * The city council decided against a petition, inform. * @param cityHall in which the petition is to be denied * @param petition that is denied */ private void handleDeniedCityPetition(ICityHall cityHall, ICityPetition petition) { DisplayMessage msg = null; if (petition instanceof ICityWallPetition) { msg = new DisplayMessage("ch.sahits.game.openpatrician.engine.land.city.CityHallEngine.noPetitionCityWall", new Object[]{cityHall.getCity().getName()}); } if (petition instanceof IHeadTaxPetition) { msg = new DisplayMessage("ch.sahits.game.openpatrician.engine.land.city.CityHallEngine.noPetitionHeadTax", new Object[]{cityHall.getCity().getName()}); } if (petition instanceof IMilitiaPetition) { msg = new DisplayMessage("ch.sahits.game.openpatrician.engine.land.city.CityHallEngine.noPetitionMilitia", new Object[]{cityHall.getCity().getName()}); } if (petition instanceof ISpecialTaxPetition) { msg = new DisplayMessage("ch.sahits.game.openpatrician.engine.land.city.CityHallEngine.noPetitionSpecialTax", new Object[]{cityHall.getCity().getName()}); } for (ICitizen citizen : cityHall.getCouncilmen()) { if (citizen instanceof IHumanPlayer) { TargetedEvent displayMessage = new TargetedEvent((IHumanPlayer)citizen, msg); clientServerEventBus.post(displayMessage); } } }
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); } }; } }