/** * Create a pirate near a certain point * @param name of the pirate * @param ship new ship of the pirate * @return new sea pirate instance */ public ISeaPirate createNewPirate(String name, INavigableVessel ship) { SeaPirate pirate = context.getBean(SeaPirate.class); pirate.setName(name); pirate.setShip(ship); Point2D p = locationProvider.getRandomPointAtSea(); pirate.getShip().setLocation(p); return pirate; }
@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
@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); } } }