diff --git a/racevisionGame/src/main/java/visualiser/Controllers/RaceController.java b/racevisionGame/src/main/java/visualiser/Controllers/RaceController.java index 8b75be1d..51d9c451 100644 --- a/racevisionGame/src/main/java/visualiser/Controllers/RaceController.java +++ b/racevisionGame/src/main/java/visualiser/Controllers/RaceController.java @@ -81,7 +81,13 @@ public class RaceController extends Controller { private View3D view3D; private ObservableList viewSubjects; + /** + * Arrow pointing to next mark in third person + */ private Subject3D nextMarkArrow; + /** + * Animation loop for rotating mark arrow + */ private AnimationTimer pointToMark; /** diff --git a/racevisionGame/src/main/java/visualiser/layout/View3D.java b/racevisionGame/src/main/java/visualiser/layout/View3D.java index c62fe22e..f51eecff 100644 --- a/racevisionGame/src/main/java/visualiser/layout/View3D.java +++ b/racevisionGame/src/main/java/visualiser/layout/View3D.java @@ -1,5 +1,6 @@ package visualiser.layout; +import javafx.animation.AnimationTimer; import javafx.beans.property.ObjectProperty; import javafx.beans.property.SimpleObjectProperty; import javafx.beans.value.ChangeListener; @@ -71,21 +72,9 @@ public class View3D extends Pane { */ private Rotate pitch; /** - * Single listener for subject heading changes + * Animation loop for camera tracking */ - private ChangeListener pivotHeading = (o, prev, curr) -> yaw.setAngle((double)curr); - /** - * Single listener for subject position (x) changes - */ - private ChangeListener pivotX = (o, prev, curr) -> pivot.setX((double)curr); - /** - * Single listener for subject position (y) changes - */ - private ChangeListener pivotY = (o, prev, curr) -> pivot.setY((double)curr); - /** - * Single listener for subject position (z) changes - */ - private ChangeListener pivotZ = (o, prev, curr) -> pivot.setZ((double)curr); + private AnimationTimer trackBoat; /** * Distance to switch from third person to bird's eye */ @@ -219,10 +208,7 @@ public class View3D extends Pane { */ private void untrackSubject() { if(target.get() != null) { - target.get().getPosition().xProperty().removeListener(pivotX); - target.get().getPosition().yProperty().removeListener(pivotY); - target.get().getPosition().zProperty().removeListener(pivotZ); - target.get().getHeading().angleProperty().removeListener(pivotHeading); + trackBoat.stop(); target.setValue(null); } } @@ -234,13 +220,14 @@ public class View3D extends Pane { private void trackSubject(Subject3D subject) { target.set(subject); - updatePivot(target.get().getPosition()); - setYaw(target.get().getHeading().getAngle()); - - target.get().getPosition().xProperty().addListener(pivotX); - target.get().getPosition().yProperty().addListener(pivotY); - target.get().getPosition().zProperty().addListener(pivotZ); - target.get().getHeading().angleProperty().addListener(pivotHeading); + this.trackBoat = new AnimationTimer() { + @Override + public void handle(long now) { + updatePivot(target.get().getPosition()); + setYaw(target.get().getHeading().getAngle()); + } + }; + trackBoat.start(); } public void setNearClip(double nearClip) {