@Override
public boolean execute() {
Preconditions.checkArgument(vessel.getLocation().equals(city.getCoordinates()), "Vessel " +vessel.getName()+" is not in city "+city.getName());
IAIPlayer owner = (IAIPlayer) vessel.getOwner();
IAIShipRepairStrategy repairStrategy = owner.getShipRepairStrategyType().getStrategy();
if (repairStrategy.shouldRepair(vessel, city)) {
repairStrategy.repair(vessel, city);
ICompany company = owner.getCompany();
int costs;
if (vessel instanceof IShip) {
costs = shipService.calculateRepairCosts(city, (IShip) vessel);
} else {
costs = shipService.calculateRepairCostsVessel(city, vessel);
}
company.updateCashDirectly(-costs);
LOGGER.debug("Executed repair check, do NOT proceed for vessel {} in {}", vessel.getName(), city.getName());
return false;
}
LOGGER.debug("Executed repair check, do proceed for vessel {} in {}", vessel.getName(), city.getName());
return true;
}