Replaced camera tracking listeners with animation timer
- Documented animation timers and mark arrow #story[1195]
This commit is contained in:
@@ -81,7 +81,13 @@ public class RaceController extends Controller {
|
|||||||
private View3D view3D;
|
private View3D view3D;
|
||||||
private ObservableList<Subject3D> viewSubjects;
|
private ObservableList<Subject3D> viewSubjects;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Arrow pointing to next mark in third person
|
||||||
|
*/
|
||||||
private Subject3D nextMarkArrow;
|
private Subject3D nextMarkArrow;
|
||||||
|
/**
|
||||||
|
* Animation loop for rotating mark arrow
|
||||||
|
*/
|
||||||
private AnimationTimer pointToMark;
|
private AnimationTimer pointToMark;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package visualiser.layout;
|
package visualiser.layout;
|
||||||
|
|
||||||
|
import javafx.animation.AnimationTimer;
|
||||||
import javafx.beans.property.ObjectProperty;
|
import javafx.beans.property.ObjectProperty;
|
||||||
import javafx.beans.property.SimpleObjectProperty;
|
import javafx.beans.property.SimpleObjectProperty;
|
||||||
import javafx.beans.value.ChangeListener;
|
import javafx.beans.value.ChangeListener;
|
||||||
@@ -71,21 +72,9 @@ public class View3D extends Pane {
|
|||||||
*/
|
*/
|
||||||
private Rotate pitch;
|
private Rotate pitch;
|
||||||
/**
|
/**
|
||||||
* Single listener for subject heading changes
|
* Animation loop for camera tracking
|
||||||
*/
|
*/
|
||||||
private ChangeListener<? super Number> pivotHeading = (o, prev, curr) -> yaw.setAngle((double)curr);
|
private AnimationTimer trackBoat;
|
||||||
/**
|
|
||||||
* Single listener for subject position (x) changes
|
|
||||||
*/
|
|
||||||
private ChangeListener<? super Number> pivotX = (o, prev, curr) -> pivot.setX((double)curr);
|
|
||||||
/**
|
|
||||||
* Single listener for subject position (y) changes
|
|
||||||
*/
|
|
||||||
private ChangeListener<? super Number> pivotY = (o, prev, curr) -> pivot.setY((double)curr);
|
|
||||||
/**
|
|
||||||
* Single listener for subject position (z) changes
|
|
||||||
*/
|
|
||||||
private ChangeListener<? super Number> pivotZ = (o, prev, curr) -> pivot.setZ((double)curr);
|
|
||||||
/**
|
/**
|
||||||
* Distance to switch from third person to bird's eye
|
* Distance to switch from third person to bird's eye
|
||||||
*/
|
*/
|
||||||
@@ -219,10 +208,7 @@ public class View3D extends Pane {
|
|||||||
*/
|
*/
|
||||||
private void untrackSubject() {
|
private void untrackSubject() {
|
||||||
if(target.get() != null) {
|
if(target.get() != null) {
|
||||||
target.get().getPosition().xProperty().removeListener(pivotX);
|
trackBoat.stop();
|
||||||
target.get().getPosition().yProperty().removeListener(pivotY);
|
|
||||||
target.get().getPosition().zProperty().removeListener(pivotZ);
|
|
||||||
target.get().getHeading().angleProperty().removeListener(pivotHeading);
|
|
||||||
target.setValue(null);
|
target.setValue(null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -234,13 +220,14 @@ public class View3D extends Pane {
|
|||||||
private void trackSubject(Subject3D subject) {
|
private void trackSubject(Subject3D subject) {
|
||||||
target.set(subject);
|
target.set(subject);
|
||||||
|
|
||||||
|
this.trackBoat = new AnimationTimer() {
|
||||||
|
@Override
|
||||||
|
public void handle(long now) {
|
||||||
updatePivot(target.get().getPosition());
|
updatePivot(target.get().getPosition());
|
||||||
setYaw(target.get().getHeading().getAngle());
|
setYaw(target.get().getHeading().getAngle());
|
||||||
|
}
|
||||||
target.get().getPosition().xProperty().addListener(pivotX);
|
};
|
||||||
target.get().getPosition().yProperty().addListener(pivotY);
|
trackBoat.start();
|
||||||
target.get().getPosition().zProperty().addListener(pivotZ);
|
|
||||||
target.get().getHeading().angleProperty().addListener(pivotHeading);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setNearClip(double nearClip) {
|
public void setNearClip(double nearClip) {
|
||||||
|
|||||||
Reference in New Issue
Block a user