@VisibleForTesting void addToFleet(IShip ship, IShipOwner owner) { if (owner instanceof IPlayer) { ((IPlayer)owner).getFleet().add(ship); } if (owner instanceof ISeaPirate) { ISeaPirate pirate = (ISeaPirate) owner; IShipGroup oldGroup = pirate.getShip() instanceof IShipGroup ? (IShipGroup) pirate.getShip() : null; if (oldGroup != null) { oldGroup.addShip(ship); } else { ArrayList<IShip> ships = new ArrayList<>(); ships.add((IShip) pirate.getShip()); ships.add(ship); IShipGroup group = regroup(ships, (IShipGroup) null); ((SeaPirate)pirate).setShip(group); } } } @VisibleForTesting
String name = pirateTask.getPirate().getName(); String template = messageSource.getMessage("ch.sahits.game.openpatrician.display.dialog.cityhall.AldermanOfficeDialog.taskPirateHunt", new Object[]{name}, locale.getCurrentLocal()); return textFactory.createDecoratedText(template, new HashMap<>());
IHuntPirate concreteTask = (IHuntPirate) task; LocalDateTime deadline = date.getCurrentDate().plusDays(concreteTask.getDuration()); Object[] args = new Object[]{concreteTask.getPirate().getName(), modelTranslator.toDisplayString(deadline)}; DialogTemplate template = DialogTemplate.builder() .closable(true)
@VisibleForTesting void removeFromFleet(IShip ship, IShipOwner owner) { if (owner instanceof IPlayer) { ((IPlayer) owner).getFleet().remove(ship); } if (owner instanceof ISeaPirate) { ISeaPirate pirate = (ISeaPirate) owner; IShipGroup oldGroup = pirate.getShip() instanceof IShipGroup ? (IShipGroup) pirate.getShip() : null; if (oldGroup != null) { oldGroup.removeShip(ship); if (oldGroup.getShips().size() == 1) { ((SeaPirate)pirate).setShip(oldGroup.getShips().get(0)); ((DependentAnnotationConfigApplicationContext)context).removePrototypeBean(oldGroup); } } else { piratesState.remove(pirate); ((DependentAnnotationConfigApplicationContext)context).removePrototypeBean(pirate); } } }
} /** * Select a new destination for the pirate. * @param pirate free sea pirate */ private void selectDestination(ISeaPirate pirate) { Point2D destination; if (pirate instanceof INonFreeSeaPirate && ((INonFreeSeaPirate) pirate).roamingNearCity().isPresent()) { ICity city = ((INonFreeSeaPirate) pirate).roamingNearCity().get(); destination = mapService.getRandomPointAtSeaNear(city.getCoordinates()); } else { destination = mapService.getLocationAtOtherEndOfMap(pirate.getShip().getLocation()); } // make sure that the source of the pirate location is in the graph Point2D adjustedDestination = aStarHeuristicProvider.findClosest(destination); aStarHeuristicProvider.addTargetNodeToHeuristic(adjustedDestination); logger.debug("Source point of pirate is {}", pirate.getShip().getLocation()); seafaringService.travelNotBetweenCities(pirate.getShip(), adjustedDestination); }
/** * Handle the even when a new pirate becomes available. * @param pirateEvent new pirate emerged */ @Subscribe public void handleNewPirate(NewPirateEvent pirateEvent) { IShip ship = (IShip) pirateEvent.getPirate().getShip(); Point2D adjustedSource = aStarHeuristicProvider.findClosest(ship.getLocation()); ship.setLocation(adjustedSource); selectDestination(pirateEvent.getPirate()); }
if (rnd.nextBoolean() || noInformationYet) { ISeaPirate pirate = pirateState.findSuccessfulPirate(); ICity nearest = cityUtils.findNearestCity(pirate.getShip().getLocation()); informant.setPirateLocation(pirate, nearest);