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); } }
private EventHandler<MouseEvent> createPrivateConvoy(IShip vessel) { return event -> { try { IConvoy convoy = shipFactory.getConvoy(vessel, false); vessel.parentShipProperty().setValue(vessel); final ICityPlayerProxyJFX proxy = viewState.getCurrentCityProxy().get(); proxy.arrive(convoy); proxy.leave(vessel); proxy.activateShip(convoy); convoyList.add(convoy); IPlayer player = proxy.getPlayer(); player.removeSelectableVessel(vessel); player.addSelectableVessel(convoy); executeOnCloseButtonClicked(); } catch (RuntimeException e) { logger.error("Failed to create private convoy", e); } }; }
private EventHandler<MouseEvent> createPublicConvoy(IShip vessel) { return event -> { try { IConvoy convoy = shipFactory.getConvoy(vessel, true); vessel.parentShipProperty().setValue(vessel); final ICityPlayerProxyJFX proxy = viewState.getCurrentCityProxy().get(); proxy.arrive(convoy); proxy.leave(vessel); proxy.activateShip(convoy); convoyList.add(convoy); IPlayer player = proxy.getPlayer(); player.removeSelectableVessel(vessel); player.addSelectableVessel(convoy); executeOnCloseButtonClicked(); } catch (RuntimeException e) { logger.error("Failed to create public convoy", e); } }; }
private EventHandler<MouseEvent> dissolve(IConvoy vessel, ICity city) { return event -> { try { vessel.getOrlegShip().parentShipProperty().setValue(null); for (IShip ship : vessel.getShips()) { IShipOwner owner = ship.getOwner(); vessel.removeShip(ship); ship.parentShipProperty().setValue(null); if (owner instanceof IHumanPlayer) { DisplayMessage msg = new DisplayMessage("ch.sahits.game.openpatrician.display.dialog.sea.ConvoyDialog.convoyDissolveNotification", vessel.getName(), ship.getName(), city.getName()); TargetedEvent targetMsg = new TargetedEvent((IHumanPlayer) owner, msg); // TODO: 12.03.17 why do we have a targeted event here? we can sending it directly, as the user is the target. clientServerEventBus.post(targetMsg); } if (owner instanceof IPlayer) { IPlayer player = (IPlayer) owner; player.addSelectableVessel(ship); } clientServerEventBus.post(new ShipEntersPortEvent(ship, city)); } viewState.getCurrentCityProxy().get().leave(vessel); convoyList.remove(vessel); IPlayer player = viewState.getCurrentCityProxy().get().getPlayer(); player.removeSelectableVessel(vessel); executeOnCloseButtonClicked(); } catch (RuntimeException e) { logger.error("Failed to dissolve convoy", e); } }; }