/** * Retrieve all cities provided by {@link IMap}, that are * currently not under a blockade. * @return list of all non blockaded cities. */ public List<ICity> getAllNonBlockedCities() { List<ICity> cities = new ArrayList<>(map.getCities()); for (Entry<ICity, IBlockade> entry : blockade.entrySet()) { cities.remove(entry.getKey()); } return cities; } }
@Subscribe public void handleBlockadeConvoyReturns(ShipEntersPortEvent event) { // disolve the convoy and remove blockade from blockade state INavigableVessel vessel = event.getShip(); if (vessel instanceof IConvoy) { LocalDateTime now = date.getCurrentDate(); ICity aldermanCity = mapService.getAldermanCity(); for (Entry<ICity, IBlockade> blockadeEntry : blockadeState.entrySet()) { IBlockade blockade = blockadeEntry.getValue(); if (blockade.getEndBlockade().isBefore(now)) { IConvoy convoy = blockade.getBlockadeConvoy(); if (convoy.equals(vessel) && event.getCity().equals(aldermanCity)) { final ICity blockadedCity = blockadeEntry.getKey(); dissolveConvoy(blockade, aldermanCity, blockadedCity); blockadeState.finishBlockade(blockadedCity); IGuild guild = guildList.findGuild(aldermanCity).get(); for (IShip ship : blockade.getShipsToAuction()) { LocalDateTime auctionDate = now.plusDays(10); auctionDate = guildService.cleanUpAuctionAndDetermineAuctionDate(auctionDate, guild); IShipAuction auction = modelFactory.createAnonymousShipAuction(auctionDate, ship.getValue(), ship); guild.getAuctions().add(auction); } return; } } } } }
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); } }
for (Entry<ICity, IBlockade> blockadeEntry : blockadeState.entrySet()) { IBlockade blockade = blockadeEntry.getValue(); ICity blockadeCity = blockadeEntry.getKey(); seafaringService.travelBetweenCities(convoy, blockadeCity); } else { blockadeState.finishBlockade(blockadeCity);
private void handleBlockadeMission(INavigableVessel vessel, IAIPlayer player, ICity city) { LocalDateTime now = date.getCurrentDate(); ICity aldermanCity = mapService.getAldermanCity(); if (city.equals(aldermanCity)) { if (blockadeState.entrySet().isEmpty()) { initializeStrategyForVessel(player, vessel); } else { for (Entry<ICity, IBlockade> entry : blockadeState.entrySet()) { IBlockade blockade = entry.getValue(); if (blockade.getAssemblyDate().isBefore(now)) { // Missed assemby date initializeStrategyForVessel(player, vessel); } } } } else { initializeStrategyForVessel(player, vessel); } }
@Subscribe public void handleShipBreaksBlockade(ShipNearingPortEvent event) { ICity city = event.getCity(); for (Entry<ICity, IBlockade> entry : blockadeState.entrySet()) { if (entry.getKey().equals(city)) { IConvoy blocadingConvoy = entry.getValue().getBlockadeConvoy(); INavigableVessel blockadeBreaker = event.getShip(); BlockadeSeafightContext context = new BlockadeSeafightContext(entry.getValue()); IPlayer owner = (IPlayer) blockadeBreaker.getOwner(); owner.updateCrimialDrive(1); seafightService.calculateOutcome(blocadingConvoy, blockadeBreaker, context); entry.getValue().getShipsToAuction().addAll(context.getCapturedShips()); } } } @Subscribe