From 452e83c1c325166e6714435f8b5d1a6bc5118a63 Mon Sep 17 00:00:00 2001 From: Alistair McIntyre Date: Wed, 27 Sep 2017 17:52:54 +1300 Subject: [PATCH] - Marker seems to be detecting the correct mark but somethings wrong with the maths. tags : #story[1276] --- .../java/seng302/visualiser/GameView3D.java | 14 +++++++++ .../fxObjects/assets_3D/BoatObject.java | 30 +++++++------------ 2 files changed, 25 insertions(+), 19 deletions(-) diff --git a/src/main/java/seng302/visualiser/GameView3D.java b/src/main/java/seng302/visualiser/GameView3D.java index f9702d71..f044804c 100644 --- a/src/main/java/seng302/visualiser/GameView3D.java +++ b/src/main/java/seng302/visualiser/GameView3D.java @@ -8,6 +8,7 @@ import java.util.List; import java.util.Map; import javafx.animation.AnimationTimer; import javafx.application.Platform; +import javafx.beans.value.ObservableValue; import javafx.geometry.Point2D; import javafx.geometry.Point3D; import javafx.scene.Camera; @@ -79,6 +80,7 @@ public class GameView3D { private List borderPoints; private Map markerObjects; + private BoatObject playerBoat; private Map boatObjects = new HashMap<>(); private BoatObject selectedBoat = null; private Group wakesGroup = new Group(); @@ -494,11 +496,23 @@ public class GameView3D { ViewManager.getInstance().getGameClient().getServerThread().getClientId())) { ((ChaseCamera) chaseCam).setPlayerBoat(newBoat); ((TopDownCamera) topDownCam).setPlayerBoat(newBoat); + newBoat.setMarkIndicator( ModelFactory.importModel(ModelType.NEXT_MARK_INDICATOR).getAssets()); + playerBoat = newBoat; + } } Platform.runLater(() -> { + ClientYacht playerYacht = ViewManager.getInstance().getGameClient().getAllBoatsMap() + .get(ViewManager.getInstance().getGameClient().getServerThread().getClientId()); + + for (ObservableValue o : Arrays + .asList(playerBoat.layoutXProperty(), playerBoat.layoutXProperty())) { + o.addListener((obs, oldVal, newVal) -> playerBoat.updateMarkIndicator( + findScaledXY(course.get(playerYacht.getLegNumber()).getMidPoint()) + )); + } gameObjects.getChildren().addAll(wakes); gameObjects.getChildren().addAll(boatObjectGroup); }); diff --git a/src/main/java/seng302/visualiser/fxObjects/assets_3D/BoatObject.java b/src/main/java/seng302/visualiser/fxObjects/assets_3D/BoatObject.java index c082a49c..29640eaa 100644 --- a/src/main/java/seng302/visualiser/fxObjects/assets_3D/BoatObject.java +++ b/src/main/java/seng302/visualiser/fxObjects/assets_3D/BoatObject.java @@ -5,6 +5,7 @@ import java.util.List; import javafx.application.Platform; import javafx.beans.property.ReadOnlyDoubleWrapper; import javafx.collections.ObservableList; +import javafx.geometry.Point2D; import javafx.geometry.Point3D; import javafx.scene.Group; import javafx.scene.paint.Color; @@ -12,8 +13,6 @@ import javafx.scene.transform.Rotate; import javafx.scene.transform.Scale; import javafx.scene.transform.Transform; import javafx.scene.transform.Translate; -import seng302.model.ClientYacht; -import seng302.visualiser.controllers.ViewManager; /** * BoatGroup is a javafx group that by default contains a graphical objects for representing a 2 @@ -83,34 +82,26 @@ public class BoatObject extends Group { this.layoutYProperty().setValue(y); wake.setLayoutX(x); wake.setLayoutY(y); - - if (markIndicator != null) { // The player boat. - updateMarkIndicator(); - } - }); } - private void updateMarkIndicator() { + public void updateMarkIndicator(Point2D markPoint) { // calculate heading between boat and next mark - Integer sourceId = ViewManager.getInstance().getGameClient().getServerThread() - .getClientId(); - ClientYacht playerYacht = ViewManager.getInstance().getGameClient().getAllBoatsMap() - .get(sourceId); + Double x = markPoint.getX(); + Double y = markPoint.getY(); - Double x; - Double y; - - Double deltaX = (this.getLayoutX() - x); - Double deltaY = (this.getLayoutY() - y); + Double deltaX = (boatAssets.getAssets().getLayoutX() - x); + Double deltaY = (boatAssets.getAssets().getLayoutY() - y); Double angle = Math.toDegrees(Math.atan2(deltaY, deltaX)); + //Double angle = rotation.getAngle(); + ObservableList transforms = markIndicator.getTransforms(); Double radius = 3.0; Double scale = 0.4; - //Double angle = this.rotation.getAngle(); // THIS WILL BE THE NEXT MARK + Double originX = this.getLayoutX(); Double originY = this.getLayoutY(); @@ -119,7 +110,8 @@ public class BoatObject extends Group { transforms.clear(); transforms.addAll( - new Rotate(angle, markIndicator.getLayoutX(), markIndicator.getLayoutY(), 0), + new Rotate(angle, boatAssets.getAssets().getLayoutX(), + boatAssets.getAssets().getLayoutY(), 0), new Translate(transX, transY, -1), new Scale(scale, scale, scale) );