@Override public Optional<INavigableVessel> selectCollectingVessel(IAIPlayer player, EShipType shipType) { int totalAmountInBarrel = 0; for (EWare ware : EWare.values()) { int amount = shipFactory.getConstructionAmount(shipType, ware); totalAmountInBarrel += amount * ware.getSizeAsBarrels(); } for (INavigableVessel vessel : player.getSelectableVessels()) { if (vessel.getCapacity() > totalAmountInBarrel) { if (isVesselEligibleForCollecting(player, vessel)) { return Optional.of(vessel); } } } if (isVesselEligibleForCollecting(player, player.getSelectableVessels().get(0))) { return Optional.of(player.getSelectableVessels().get(0)); } else { return Optional.empty(); } }
public Optional<IShip> selectShip(IAIPlayer player) { List<INavigableVessel> vessels = player.getSelectableVessels(); IShip strongestShip = null; int strongest = 0; for (INavigableVessel vessel : vessels) { if (vessel instanceof IShip && !(player.getTradeMission(vessel) instanceof ISpecialMission)) { int strength = shipService.calculateShipsWeaponsStrength(vessel); if (strongestShip == null) { strongestShip = (IShip) vessel; strongest = strength; } else if (strength > strongest) { strongestShip = (IShip) vessel; strongest = strength; } } } return Optional.ofNullable(strongestShip); } }
List<INavigableVessel> vesselList = player.getSelectableVessels(); for (INavigableVessel ship : vesselList) { startTradeStrategySteps(player, ship);
double minDistance = Double.MAX_VALUE; Point2D coord = hometown.getCoordinates(); for (INavigableVessel vessel : player.getSelectableVessels()) { double distance = vessel.getLocation().distance(coord); if (distance < minDistance) {
@Subscribe public void handleWeeklyTasks(PeriodicalTimeWeekEndUpdate event) { if (disableService.aiTradingEnabled()) { for (IAIPlayer player : players) { List<INavigableVessel> shipList = player.getSelectableVessels(); for (INavigableVessel vessel : shipList) { if (!tradeChecker.isEngagedInTrading(vessel) && tradeChecker.shouldBeTrading(vessel)) { IAIPlayer owner = (IAIPlayer) vessel.getOwner(); logger.warn("The vessel {} of {} {} is currently not trading (position: {}), strategy={}: reinitialize", vessel.getName(), owner.getName(), owner.getLastName(), vessel.getLocation(), owner.getTradeStrategyType(vessel)); clearRemainingTradeSteps(vessel, player); initializeStrategyForVessel(player, vessel); // Execute IAITradeStrategy tradeStrategy = player.getTradeStrategyType(vessel).getStrategy(); tradeStrategy.executeTradeSteps(player, vessel); } } // Check Ship construction IAIConstructionSelectionStrategy constructionStategy = player.getConstructionSelectionType().getStrategy(); if (constructionStategy.shouldOrderNewConstruction(player)) { EShipType type = constructionStategy.shouldBuildShipType(player); Optional<INavigableVessel> vessel = constructionStategy.selectCollectingVessel(player, type); vessel.ifPresent(iNavigableVessel -> constructionStategy.initShipConstruction(player, iNavigableVessel, type)); } } } } /**