@Override public void handleShipArrivesInPort(IShipEntersPortEvent event) { // no move steps defined INavigableVessel vessel = event.getShip(); if (isMatchingTradeStrategy(vessel)) { IAIPlayer player = (IAIPlayer) vessel.getOwner(); Preconditions.checkArgument(!hasMoreTradeSteps(player, vessel), "There must not be any more trade steps defined."); ICity city = event.getCity(); Preconditions.checkArgument(city.getCoordinates().equals(vessel.getLocation()), "The vessel " + vessel.getName() + " actually is not in city " + city.getName()); initializeTradeCycle(player, vessel); executeTradeSteps(player, vessel); } } }
@Override public void handleShipArrivesInPort(IShipEntersPortEvent event) { INavigableVessel vessel = event.getShip(); if (isMatchingTradeStrategy(vessel)) { IAIPlayer player = (IAIPlayer) vessel.getOwner(); initializeTradeCycle(player, vessel); executeTradeSteps(player, vessel); } }
@Override public void handleShipArrivesInPort(IShipEntersPortEvent event) { INavigableVessel vessel = event.getShip(); if (isMatchingTradeStrategy(vessel)) { IAIPlayer player = (IAIPlayer) vessel.getOwner(); ICity city = event.getCity(); CentralStorageDeliverMissionData missionData = (CentralStorageDeliverMissionData) player.getTradeMission(vessel); if (city.equals(missionData.getSourceCity())) { // Sell the wares not on the list // refill and restart handleTradeInCentralStorage(player, vessel, city, missionData.getContext()); } else { // calculate the wares needed in cities down the road and sell accordingly // buy wares that are needed and not in the delivery list handleTradeInSuppliedCity(player, vessel, city, missionData); } executeTradeSteps(player, vessel); } } @VisibleForTesting
@Override public void handleShipArrivesInPort(IShipEntersPortEvent event) { // no move steps defined INavigableVessel vessel = event.getShip(); if (isMatchingTradeStrategy(vessel)) { ICity city = event.getCity(); Preconditions.checkArgument(city.getCoordinates().equals(vessel.getLocation()), "The vessel " + vessel.getName() + " actually is not in city " + city.getName()); IAIPlayer player = (IAIPlayer) vessel.getOwner(); if (city.equals(player.getHometown())) { addTradeStepsSellingInHomeTown(player, vessel); } else { addTradeStepTradingNextTown(player, vessel); } executeTradeSteps(player, vessel); } }
@Override public void handleShipArrivesInPort(IShipEntersPortEvent event) { INavigableVessel vessel = event.getShip(); if (isMatchingTradeStrategy(vessel)) { IAIPlayer player = (IAIPlayer) vessel.getOwner(); ICity city = event.getCity(); SupplyCityMissionData missionData = (SupplyCityMissionData) player.getTradeMission(vessel); ICity targetCity = missionData.getTargetCity(); CentralStorageStrategyHint hint = (CentralStorageStrategyHint) player.getPlayerContext().getHints(targetCity).stream().filter(h -> h instanceof CentralStorageStrategyHint).findFirst().get(); CentralStorageHintContext context = (CentralStorageHintContext) hint.getContext(); if (city.equals(targetCity)) { // - unload oal to storage TransferToOfficeTradeStep transferToOfficeStep = createTransferToOfficeTradeStep(vessel, city); append(player, vessel, transferToOfficeStep); // - find best city to supply wares ICity nextStop = findProvidingWares(city, context.getWares(), context.getSuppliedCities(), player, vessel); // buy wares needed there ICityProductionConsumptionKnowledge cityKnowledge = player.getProductionAndConsumptionKnowledge().getKnowlege(nextStop); List<Pair<IWare, Number>> needs = getMostNeededWares(cityKnowledge, vessel); HashSet<IWare> buyWares = new HashSet<>(); needs.stream().forEach(pair -> buyWares.add(pair.getKey())); buyWares.removeAll(context.getWares()); addDefaultTradeSteps(vessel, player, city, nextStop, new HashSet<>(context.getWares()), buyWares, false); } else { addDefaultTradeSteps(vessel, player, city, targetCity, new HashSet<>(context.getWares()), new HashSet<>(context.getWares()), false); } executeTradeSteps(player, vessel); } }
@Override public void handleShipArrivesInPort(IShipEntersPortEvent event) { INavigableVessel vessel = event.getShip(); if (isMatchingTradeStrategy(vessel)) { IAIPlayer player = (IAIPlayer) vessel.getOwner(); ICity city = event.getCity(); IProductionConsumptionKnowledge globalKnowledge = player.getProductionAndConsumptionKnowledge(); DynamicTradeRouteMissionData missionData = (DynamicTradeRouteMissionData) player.getTradeMission(vessel); int wareAmount = vessel.getWare(missionData.getWare()).getAmount(); if (wareAmount > 0) { // TODO: andi 10/27/17 when selling all wares in this city we still travel one further: #631 List<IWare> wareOfInterest = Collections.singletonList(missionData.getWare()); ICity nextStop = findNextStopForSelling(city, globalKnowledge, wareOfInterest, vessel, city); addDefaultTradeSteps(vessel, player, city, nextStop, new HashSet<>(), new HashSet<>(), false); } else { Pair<ICity, IWare> pair = findClosestCityProducingTradableWare(player, vessel); missionData.setWare(pair.getValue()); handleBuyWaresReturnToStartCity(player, vessel, city, pair.getKey()); } } } }
@Override public void handleShipArrivesInPort(IShipEntersPortEvent event) { final INavigableVessel vessel = event.getShip(); if (isMatchingTradeStrategy(vessel)) { final ICity city = event.getCity(); final IAIPlayer player = (IAIPlayer) vessel.getOwner(); final CollectWaresMissionData tradeMission = (CollectWaresMissionData) player.getTradeMission(vessel);
@Override public void handleShipArrivesInPort(IShipEntersPortEvent event) { INavigableVessel vessel = event.getShip(); if (isMatchingTradeStrategy(vessel)) { ICity city = event.getCity(); IAIPlayer player = (IAIPlayer) vessel.getOwner(); ProductionChainMissionData missionData = getMissionData(player, vessel);