private Point2D makeControlPoint(final double endX, final double endY, final Circle circle, final int numSegments, int direction) { final double controlPointDistance = (4.0 / 3.0) * Math.tan(Math.PI / (2 * numSegments)) * circle.getRadius(); final Point2D center = new Point2D(circle.getCenterX(), circle.getCenterY()); final Point2D end = new Point2D(endX, endY); Point2D perp = rotate(center, end, direction * Math.PI / 2.); Point2D diff = perp.subtract(end); diff = diff.normalize(); diff = scale(diff, controlPointDistance); return end.add(diff); }
@Subscribe public void handleShipLeavesCity(ShipLeavingPort event) { ICity city = event.getCity(); final IShipOwner owner = event.getShip().getOwner(); if (owner instanceof IHumanPlayer && owner.equals(viewState.getPlayer())) { List<INavigableVessel> ships = ((IHumanPlayer)owner).findShips(city); if (ships.isEmpty()) { double cityX = (int) Math.rint(city.getCoordinates().getX()) * scale.doubleValue(); double cityY = (int) Math.rint(city.getCoordinates().getY()) * scale.doubleValue(); for (Iterator<Node> iterator = shipCanvas.getChildren().iterator(); iterator.hasNext(); ) { Node node = iterator.next(); if (node instanceof Circle) { Circle c = (Circle) node; if (c.getCenterX() == cityX && c.getCenterY() == cityY) { Platform.runLater(iterator::remove); break; } } } } } }
@Subscribe public void handleShipLeavesCity(ShipLeavingPort event) { ICity city = event.getCity(); final IShipOwner owner = event.getShip().getOwner(); if (owner instanceof IHumanPlayer && owner.equals(viewState.getPlayer())) { List<INavigableVessel> ships = ((IHumanPlayer)owner).findShips(city); if (ships.isEmpty()) { double cityX = (int) Math.rint(city.getCoordinates().getX()) * scale; double cityY = (int) Math.rint(city.getCoordinates().getY()) * scale; double viewportOffset = imgView.getViewport().getMinX() * scale; for (Iterator<Node> iterator = mapPane.getChildren().iterator(); iterator.hasNext(); ) { Node node = iterator.next(); if (node instanceof Circle) { Circle c = (Circle) node; if (c.getCenterX() + viewportOffset == cityX && c.getCenterY() == cityY) { Platform.runLater(iterator::remove); break; } } } } } } @Subscribe
private Point2D makeControlPoint(final double endX, final double endY, final Circle circle, final int numSegments, int direction) { final double controlPointDistance = (4.0 / 3.0) * Math.tan(Math.PI / (2 * numSegments)) * circle.getRadius(); final Point2D center = new Point2D(circle.getCenterX(), circle.getCenterY()); final Point2D end = new Point2D(endX, endY); Point2D perp = rotate(center, end, direction * Math.PI / 2.); Point2D diff = perp.subtract(end); diff = diff.normalize(); diff = scale(diff, controlPointDistance); return end.add(diff); }