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); } } }
@Subscribe public void propagate(TargetedEvent message) { clientServerEventBus.post(message.getEvent()); } }
@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); } } }
.build(); DisplayTemplateMessage message = new DisplayTemplateMessage(titleKey, template); TargetedEvent tagetDisplayMsg = new TargetedEvent((IHumanPlayer)attacker, message); clientServerEventBus.post(tagetDisplayMsg); .build(); DisplayTemplateMessage message = new DisplayTemplateMessage(titleKey, template); TargetedEvent tagetDisplayMsg = new TargetedEvent((IHumanPlayer)defender, message); clientServerEventBus.post(tagetDisplayMsg);
@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); } }
.build(); DisplayTemplateMessage message = new DisplayTemplateMessage(titleKey, template); TargetedEvent tagetDisplayMsg = new TargetedEvent((IHumanPlayer)player, message); clientServerEventBus.post(tagetDisplayMsg); } else { .build(); DisplayTemplateMessage message = new DisplayTemplateMessage(titleKey, template); TargetedEvent tagetDisplayMsg = new TargetedEvent((IHumanPlayer)player, 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
/** * Trigger the event for a marriage broker. * @param event ship entered port */ @Subscribe public void handleShipEntersPort(ShipEntersPortEvent event) { INavigableVessel ship = event.getShip(); if (ship.getOwner() instanceof IPlayer && disableService.randomEventsEnabled()) { IPlayer player = (IPlayer) ship.getOwner(); // Marriage broker to initialize marriage // unmarried and not already in negotiation. Optional<EEventState> marriageState = eventState.getMarriageState(player); boolean meetBroker = rnd.nextInt(30) < 2; // 5% chance to meet a broker. if (!player.getSpouseData().isPresent() && marriageState != null && meetBroker && !marriageState.isPresent()) { if (player instanceof IAIPlayer) { MarriageBrokerAnnouncementState state = createMarriageBrokerAnnouncementState(event, ship); aiEventHandler.handleMarriageEvent((IAIPlayer) player, state); } else if (player instanceof IHumanPlayer) { MarriageBrokerAnnouncementState state = createMarriageBrokerAnnouncementState(event, ship); eventService.postToHumanPlayer(state, player, "ch.sahits.game.openpatrician.engine.event.EventEngine.message.marriageOffer.title"); clientServerEventBus.post(new TargetedEvent((IHumanPlayer) player, state)); eventState.setMarriageState(player, EEventState.MARRIAGE_UNDER_CONSIDERATION); } } } }
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 void postAttackOutcome(List<IShip> attackingShips, List<IShip> defendingShips, List<IShip> defeatedDefendingShips, List<IShip> defeatedAttackingShips, INavigableVessel attackingVessel, INavigableVessel defendingVessel) { if (defendingShips.size() == defeatedDefendingShips.size()) { clientServerEventBus.post(new ShipAttackEvent(defendingVessel, attackingVessel)); if (attackingVessel.getPirateFlag()) { IShipOwner owner = attackingVessel.getOwner(); String name = owner.getName() + " " + owner.getLastName(); String titleKey = "ch.sahits.game.openpatrician.engine.sea.SeaFightService.eventvideo.title"; Object[] titleParams = new Object[]{}; DisplayEventVideo event = DisplayEventVideo.builder() .mediaType(EEventMediaType.PIRATE_ATTACK) .durationInSeconds(23) .titleKey(titleKey) .titleParams(titleParams) .descriptionKey("ch.sahits.game.openpatrician.engine.sea.SeaFightService.eventvideo.message") .descriptionParams(new Object[]{name}) .build(); for (IPlayer player : players ) { if (player instanceof IHumanPlayer) { clientServerEventBus.post(new TargetedEvent((IHumanPlayer) player, event)); } } } } if (attackingShips.size() == defeatedAttackingShips.size()) { clientServerEventBus.post(new ShipDefenseEvent(defendingVessel, attackingVessel)); } }
public void initializeNewBlockade(ICity city) { LocalDateTime assemblyDate = date.getCurrentDate().plusDays(21); int variance = rnd.nextInt(120) - 60; LocalDateTime endBlockage = assemblyDate.plusDays(120 + variance); Blockade blockade = (Blockade) context.getBean("blockade", assemblyDate, endBlockage); ICity assemblyPoint = mapService.getAldermanCity(); boolean anyShipRequested = false; for (IPlayer player : players) { int fleetSize = player.getFleet().size(); int nbShips = Math.min(fleetSize/10, 3); if (nbShips > 0) { anyShipRequested = true; blockade.requestShip(player, nbShips); if (player instanceof IHumanPlayer) { String dateAsString = modelTranslationService.toDisplayString(assemblyDate); DisplayMessage msg = new DisplayMessage("ch.sahits.game.openpatrician.engine.sea.BlockadeEngine.blockadeRequest", new Object[]{city.getName(), nbShips, dateAsString, assemblyPoint.getName()}); TargetedEvent targetMsg = new TargetedEvent((IHumanPlayer) player, msg); clientServerEventBus.post(targetMsg); } else { BlockadeShipRequestEvent event = new BlockadeShipRequestEvent(assemblyPoint, nbShips, (IAIPlayer) player); clientServerEventBus.post(event); // this could also be sent on the serverside only } } } if (anyShipRequested) { blockadeState.addBlockade(city, blockade); } }
@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
DisplayMessage msg = new DisplayMessage("ch.sahits.game.openpatrician.engine.sea.model.ShipPositionUpdateTask.shipArrivedInCity", new Object[]{vessel.getName(), city.get().getName()}); clientServerEventBus.post(new TargetedEvent((IHumanPlayer) vessel.getOwner(), msg)); DisplayMessage msg = new DisplayMessage("ch.sahits.game.openpatrician.engine.sea.model.ShipPositionUpdateTask.shipArrivedAtDestination", new Object[]{vessel.getName()}); clientServerEventBus.post(new TargetedEvent((IHumanPlayer) vessel.getOwner(), msg));
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)vessel.getOwner(), message); clientServerEventBus.post(tagetDisplayMsg);