From e66abb43407c6a53bcc4788a630995b3e2372625 Mon Sep 17 00:00:00 2001 From: Alistair McIntyre Date: Mon, 25 Sep 2017 14:39:09 +1300 Subject: [PATCH] - An attempt at chase cam smoothing. needs work. tags : #story[1273] --- src/main/java/seng302/model/ClientYacht.java | 18 +++++++++++ .../visualiser/cameras/ChaseCamera.java | 31 +++++++++++++++++-- 2 files changed, 46 insertions(+), 3 deletions(-) diff --git a/src/main/java/seng302/model/ClientYacht.java b/src/main/java/seng302/model/ClientYacht.java index f14b0e5a..f2fcec96 100644 --- a/src/main/java/seng302/model/ClientYacht.java +++ b/src/main/java/seng302/model/ClientYacht.java @@ -65,6 +65,7 @@ public class ClientYacht extends Observable { private ReadOnlyLongWrapper timeTillNextProperty = new ReadOnlyLongWrapper(); private ReadOnlyLongWrapper timeSinceLastMarkProperty = new ReadOnlyLongWrapper(); private ReadOnlyIntegerWrapper placingProperty = new ReadOnlyIntegerWrapper(); + private ReadOnlyDoubleWrapper headingProperty = new ReadOnlyDoubleWrapper(); private Color colour; public ClientYacht(String boatType, Integer sourceId, String hullID, String shortName, @@ -224,6 +225,7 @@ public class ClientYacht extends Observable { public void setHeading(Double heading) { this.heading = heading; + setHeadingProperty(); } @Override @@ -256,6 +258,7 @@ public class ClientYacht extends Observable { public void updateLocation(double lat, double lng, double heading, double velocity) { setLocation(lat, lng); this.heading = heading; + setHeadingProperty(); this.currentVelocity = velocity; updateVelocityProperty(velocity); for (YachtLocationListener yll : locationListeners) { @@ -263,6 +266,15 @@ public class ClientYacht extends Observable { } } + private void setHeadingProperty() { + Double oldHeading = getHeadingProperty().get(); + Double currHeading = heading; + while (oldHeading.equals(currHeading)) { + oldHeading++; + headingProperty.set(oldHeading); + } + } + public void addLocationListener(YachtLocationListener listener) { locationListeners.add(listener); } @@ -299,4 +311,10 @@ public class ClientYacht extends Observable { public BoatObject getBoatObject() { return this.boatObject; } + + public ReadOnlyDoubleWrapper getHeadingProperty() { + + return headingProperty; + } + } diff --git a/src/main/java/seng302/visualiser/cameras/ChaseCamera.java b/src/main/java/seng302/visualiser/cameras/ChaseCamera.java index 466e86fa..b84e64ec 100644 --- a/src/main/java/seng302/visualiser/cameras/ChaseCamera.java +++ b/src/main/java/seng302/visualiser/cameras/ChaseCamera.java @@ -17,16 +17,27 @@ public class ChaseCamera extends PerspectiveCamera implements RaceCamera { private ObservableList transforms; private BoatObject playerBoat; private ClientYacht playerYacht; + private Double zoomFactor; public ChaseCamera() { super(true); transforms = this.getTransforms(); + this.zoomFactor = -75.0; } public void setPlayerBoat(BoatObject playerBoat, ClientYacht playerYacht) { this.playerBoat = playerBoat; this.playerYacht = playerYacht; + + this.playerYacht.getHeadingProperty().addListener(new ChangeListener() { + @Override + public void changed(ObservableValue observable, Number oldValue, + Number newValue) { + repositionCamera(); + } + }); + this.playerBoat.layoutXProperty().addListener(new ChangeListener() { @Override public void changed(ObservableValue observable, Number oldValue, @@ -49,18 +60,32 @@ public class ChaseCamera extends PerspectiveCamera implements RaceCamera { new Translate(playerBoat.getLayoutX(), playerBoat.getLayoutY(), 0), new Rotate(playerYacht.getHeading(), new Point3D(0, 0, 1)), new Rotate(60, new Point3D(1, 0, 0)), - new Translate(0, 0, -75) + new Translate(0, 0, zoomFactor) + ); + } + + private void repositionCamera(Double newHeading) { + transforms.clear(); + transforms.addAll( + new Translate(playerBoat.getLayoutX(), playerBoat.getLayoutY(), 0), + new Rotate(newHeading, new Point3D(0, 0, 1)), + new Rotate(60, new Point3D(1, 0, 0)), + new Translate(0, 0, zoomFactor) ); } @Override public void zoomIn() { - transforms.addAll(new Translate(0, 0, 1.5)); + //transforms.addAll(new Translate(0, 0, 1.5)); + this.zoomFactor += 5; + repositionCamera(); } @Override public void zoomOut() { - transforms.addAll(new Translate(0, 0, -1.5)); + //transforms.addAll(new Translate(0, 0, -1.5)); + this.zoomFactor -= 5; + repositionCamera(); }