@VisibleForTesting Map<IWare, Integer> calculateBuyAmounts(Set<IWare> buyWares) { Map<IWare, Integer> buyAmounts = new HashMap<>(); for (IWare buyWare : buyWares) { int amount = 5; if (buyWare.isBarrelSizedWare()) { amount *= 10; } buyAmounts.put(buyWare, amount); } return buyAmounts; }
@VisibleForTesting int calculateBuyAmount(IWare ware, ICity city, IAIPlayer player, ETradeReason tradeReason, List<IWorkShop> workShops) { switch (tradeReason) { case REQUIRE_FOR_PRODUCTION: // one week supply return workShops.stream() .filter(workshop -> productionChain.getRequiredWares(workshop.getProducableWare()).contains(ware)) .mapToInt(workshop -> (int)Math.ceil(productionChain.getRequiredAmount(workshop.getProducableWare(), ware))) .sum(); case PRODUCED_WARE_IN_CITY: // if needed in city or city is central storage, buy higher amount int baseAmount; if (ware.isBarrelSizedWare()) { baseAmount = 20; } else { baseAmount = 5; } if (tradeService.getBasicNeeds().contains(ware) || hasCentralStorageStrategy(city, player)) { baseAmount *= 2; } return baseAmount; default: throw new IllegalStateException("Unhandled buy trade reason: "+tradeReason); } }
@Override public boolean execute() { IAIPlayer player = (IAIPlayer) vessel.getOwner(); Optional<ITradingOffice> optOffice = player.findTradingOffice(city); //noinspection OptionalIsPresent if (optOffice.isPresent()) { ITradingOffice office = optOffice.get(); if (office.getSteward().isPresent()) { List<IWare> neededWares = tradeService.getBasicNeeds(); List<IWare> transferableWares = vessel.getLoadedWares().stream() .filter(neededWares::contains) .collect(toList()); Map<IWare, Integer> map = new HashMap<>(); for (IWare ware : transferableWares) { int amount = vessel.getWare(ware).getAmount(); if (ware.isBarrelSizedWare()) { amount *= 10; } int availableSpace = office.capacityProperty().get(); int movableAmount = Math.min(Math.min(availableSpace, amount), transferAmounts.get(ware)); map.put(ware, movableAmount); } if (!map.isEmpty()) { tradeService.transferFromVesselToStorage(vessel, player, city, map); } } } return true; } }
@Override public boolean execute() { IAIPlayer player = (IAIPlayer) vessel.getOwner(); Optional<ITradingOffice> optOffice = player.findTradingOffice(city); //noinspection OptionalIsPresent if (optOffice.isPresent()) { ITradingOffice office = optOffice.get(); if (office.getSteward().isPresent()) { List<IWare> neededWares = tradeService.getBasicNeeds(); List<IWare> transferableWares = vessel.getLoadedWares().stream() .filter(neededWares::contains) .collect(toList()); Map<IWare, Integer> map = new HashMap<>(); for (IWare ware : transferableWares) { int amount = vessel.getWare(ware).getAmount(); if (ware.isBarrelSizedWare()) { amount *= 10; } int availableSpace = office.capacityProperty().get(); int movableAmount = Math.min(availableSpace, amount); map.put(ware, movableAmount); } if (!map.isEmpty()) { tradeService.transferFromVesselToStorage(vessel, player, city, map); } } } return true; } }
@Override public boolean execute() { IWare ware = getWare(); IPlayer player = tradingOffice.getOwner(); int maxAmount = tradingOffice.capacityProperty().get() - tradingOffice.getOccupiedSpace(); if (!ware.isBarrelSizedWare()) { maxAmount /= 10; } tradeService.buyFromCityToStorage(tradingOffice, player, city, ware, maxAmount, Optional.of(maxBuyPrice), tradingOffice.getSteward()); return true; } }
@Override public boolean execute() { IPlayer player = (IPlayer) getVessel().getOwner(); int maxAmount = getVessel().getCapacity(); if (!getWare().isBarrelSizedWare()) { maxAmount /= 10; } transferFromOfficeOrBuyFromCity(player, maxAmount); return executeNext; }
AmountablePrice<IWare> amountable = amountableProvider.createWareAmountable(); int amount; if (ware.get().isBarrelSizedWare()) { amount = rnd.nextInt(280) + 20; } else {
@Override protected boolean computeValue() { Optional<ITradingOffice> optOffice = city.getPlayer().findTradingOffice(city.getCity()); IShip ship = null; if (city.getActiveShip() instanceof IShip) { ship = (IShip) city.getActiveShip(); } int barrelAmountFactor = 1; if (!trader.getWare().isBarrelSizedWare()) { barrelAmountFactor = 10; } return optOffice.isPresent() && ship == null && ship.getCapacity() < trader.getAmount() * barrelAmountFactor; } };
@PostConstruct private void initializeDialog() { setTitle(messageSource.getMessage("ch.sahits.game.openpatrician.display.dialog.TavernBuyerDialog.title", new Object[]{}, locale.getCurrentLocal())); initializeButtons(); IBuyer buyer = (IBuyer) currentPerson.get(); int p = buyer.getAmountablePrice().getAVGPrice()*buyer.getAmountablePrice().getAmount(); Object[] args = new Object[]{buyer.getName(), buyer.getAmountablePrice().getAmount(), translator.getLocalDisplayName((EWare)buyer.getWare()), p}; String key = "ch.sahits.game.openpatrician.display.dialog.TavernBuyerDialog.bale.dialog"; if (buyer.getWare().isBarrelSizedWare()) { key = "ch.sahits.game.openpatrician.display.dialog.TavernBuyerDialog.barrel.dialog"; } String loadedText = messageSource.getMessage(key, args, locale.getCurrentLocal()); DecoratedText dt = decoratedTextFactory.createDecoratedText(loadedText, new HashMap<>()); getContent().addAll(dt); }
final IWare ware = trader.getWare(); String loadedText; if (ware.isBarrelSizedWare()) { loadedText = messageSource.getMessage("ch.sahits.game.openpatrician.display.dialog.TavernTraderDialog.dialogBarrel", new Object[]{city.getPlayer().getLastName(), translator.getLocalDisplayName((EWare) ware)}, locale.getCurrentLocal()); } else {