@Subscribe public void handleShipMove(ShipPositionUpdateEvent event) { if (event.getFromLocation().getX() != event.getToLocation().getX() || event.getFromLocation().getY() != event.getToLocation().getY()) { int[] oldIndex = calculateIndices(event.getFromLocation()); int[] newIndex = calculateIndices(event.getToLocation()); if (!Arrays.equals(oldIndex, newIndex)) { segments[oldIndex[0]][oldIndex[1]].removeIf(wr -> event.getShip().equals(wr.get())); segments[newIndex[0]][newIndex[1]].add(new WeakReference<>(event.getShip())); } } }
INavigableVessel vessel = event.getShip(); if (handlePirateShip(vessel)) { List<INavigableVessel> visibleVessels = locationTracker.getShipsInSegments(event.getToLocation(), 50); // TODO: andi 4/28/16 make this a configurable constant if (!visibleVessels.isEmpty()) {
@Subscribe public void handleShipPositionUpdate(ShipPositionUpdateEvent event) { INavigableVessel vessel = event.getShip(); TravellingVessel ship = vessels.getTravellingVessel(vessel); if (vessel.getOwner().equals(viewState.getPlayer())) { Preconditions.checkNotNull(ship, "The travelling vessel instance for " + vessel.getName() + " of " + vessel.getOwner().getName() + " " + vessel.getOwner().getLastName() + " could not be found"); } if (ship != null) { threadExecution.execute(() -> { if (ship != null) { // The ship is traveling ShipIcon view = findShipIcon(vessel); if (view != null) { // The ship is visible view.updatePosition(); } else { logger.trace("Failed to find vessel with uuid {}", vessel.getUuid()); } } handleVisibilityShips(vessel); }); } else { logger.debug("Ship ship update for {} as ship is not a traveling vessel", vessel.getName()); } }
Point2D oldLocation = vessel.getLocation(); vessel.setLocation(newLocation); syncServerClientEventBus.post(new ShipPositionUpdateEvent(vessel, oldLocation, newLocation));