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); } }; }
/** * Dissolve the convoy and return the list of ships of the owner. * @param convoy to be disolved * @param city where the convoy is disolved * @return list of ships that were in the convoy that belong to the convoys owner. */ List<IShip> dissolveConvoy(IConvoy convoy, ICity city) { ArrayList<IShip> shipList = new ArrayList<>(); 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.display.dialog.sea.ConvoyDialog.convoyDissolveNotification", new Object[]{convoy.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); } if (owner.equals(convoy.getOwner())) { shipList.add(ship); } clientServerEventBus.post(new ShipEntersPortEvent(ship, city)); } return shipList; } }
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); } }; }
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)); } }