/** * Periodically check if there is a free pirate and if not, create one. * @param event weekly update */ @Subscribe public void handleWeeklyUpdate(PeriodicalTimeWeekEndUpdate event) { // Check if there is a free pirate and if not spawn a new one if (piratesState.getFreePirates().isEmpty()) { IShip ship = createInitialPiratesShip(); String name = firstNameLoader.getRandomName()+" "+lastNameLoader.getRandomName(); ISeaPirate pirate = peopleFactory.createNewPirate(name, ship); ship.setOwner(pirate); piratesState.add(pirate); } } /**
/** * A non free pirate becomes free. * @param pirate non free pirate instance that is to be freed. */ public void free(INonFreeSeaPirate pirate) { ISeaPirate freePirate = createNewPirate(pirate.getName(), pirate.getShip()); ((DependentAnnotationConfigApplicationContext)context).removePrototypeBean(pirate); piratesState.replace(pirate, freePirate); }
@Override public void run() { while (!graphInitialized) { Thread.yield(); } String name = firstNameLoader.getRandomName()+" "+lastNameLoader.getRandomName(); IShip ship = createInitialPiratesShip(); ISeaPirate pirate = peopleFactory.createNewPirate(name, ship); ship.setOwner(pirate); piratesState.add(pirate); // this will trigger a NewPirateEvent } };
/** * Create an alderman task to hunt a pirate, while ignoring the ones that are already worked on. * @param office aderman office * @return pirate hunter task */ public Optional<IHuntPirate> createPirateHuntEledermanTask(IAldermanOffice office) { List<IAcceptedAldermanTask> workedOnTasks = office.getWorkedOnTasks(); List<ISeaPirate> tasks = new ArrayList<>(); for (IAcceptedAldermanTask workedOnTask : workedOnTasks) { if (workedOnTask.getTask() instanceof IHuntPirate) { tasks.add(((IHuntPirate)workedOnTask.getTask()).getPirate()); } } List<ISeaPirate> pirates = new ArrayList<>(pirateState.getFreePirates()); Collections.shuffle(pirates); for (ISeaPirate pirate : pirates) { if (tasks.contains(pirate)) { continue; } int duration = 60; IHuntPirate hunt = (IHuntPirate) context.getBean("huntPirate", duration, pirate); return Optional.of(hunt); } return Optional.empty(); }
private void updateReputationDueToPirateDefeat(INavigableVessel pirateVessel, INavigableVessel playerVessel) { if (pirateVessel.getOwner() instanceof ISeaPirate && playerVessel.getOwner() instanceof IPlayer) { if (!piratesState.getAllPirates().contains(pirateVessel.getOwner())) { IPlayer player = (IPlayer) playerVessel.getOwner(); for (ICity city : map.getCities()) { city.getReputation(player).update(15); // If the distruction was a Alderman task the increase is larger } } } } }
@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); } } }
ISeaPirate pirate = pirateState.findSuccessfulPirate(); ICity nearest = cityUtils.findNearestCity(pirate.getShip().getLocation()); informant.setPirateLocation(pirate, nearest);
boolean wholeHanseFlag = ((Node) event.getSource()).getId().equals("wholeHanse"); final INonFreeSeaPirate seaPirate = peopleFactory.createNewPirate(pirate.getName(), currentShip.get(), city.getPlayer(), wholeHanseFlag ? null : city.getCity()); seaPiratesState.add(seaPirate); int nbDays = rnd.nextInt(200) + 30; LocalDateTime deadline = date.getCurrentDate().plusDays(nbDays);
boolean huntPirate = false; boolean capturePirateNest = false; List<ISeaPirate> pirates = new ArrayList<>(pirateState.getFreePirates()); for (Iterator<IAldermanTask> iterator = tasks.iterator(); iterator.hasNext(); ) { IAldermanTask task = iterator.next();