- An attempt at chase cam smoothing. needs work.

tags : #story[1273]
This commit is contained in:
Alistair McIntyre
2017-09-25 14:39:09 +13:00
parent a19e191684
commit e66abb4340
2 changed files with 46 additions and 3 deletions
@@ -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;
}
}
@@ -17,16 +17,27 @@ public class ChaseCamera extends PerspectiveCamera implements RaceCamera {
private ObservableList<Transform> 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<Number>() {
@Override
public void changed(ObservableValue<? extends Number> observable, Number oldValue,
Number newValue) {
repositionCamera();
}
});
this.playerBoat.layoutXProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> 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();
}