- Chase cam kind of working, need to find a fix for the abrupt direction change.

tags : #story[1273]
This commit is contained in:
Alistair McIntyre
2017-09-25 14:03:47 +13:00
parent 6ff309a40c
commit a19e191684
3 changed files with 59 additions and 24 deletions
@@ -438,16 +438,16 @@ public class GameView3D {
((RaceCamera) view.getCamera()).zoomOut(); ((RaceCamera) view.getCamera()).zoomOut();
break; break;
case W: case W:
view.getCamera().getTransforms().addAll(new Translate(0, -1, 0)); ((RaceCamera) view.getCamera()).panUp();
break; break;
case S: case S:
view.getCamera().getTransforms().addAll(new Translate(0, 1, 0)); ((RaceCamera) view.getCamera()).panDown();
break; break;
case A: case A:
view.getCamera().getTransforms().addAll(new Translate(-1, 0, 0)); ((RaceCamera) view.getCamera()).panLeft();
break; break;
case D: case D:
view.getCamera().getTransforms().addAll(new Translate(1, 0, 0)); ((RaceCamera) view.getCamera()).panRight();
break; break;
case F1: case F1:
if (view.getCamera().equals(camera)) { if (view.getCamera().equals(camera)) {
@@ -499,7 +499,8 @@ public class GameView3D {
if (clientYacht.getSourceId().equals( if (clientYacht.getSourceId().equals(
ViewManager.getInstance().getGameClient().getServerThread().getClientId())) { ViewManager.getInstance().getGameClient().getServerThread().getClientId())) {
((ChaseCamera) camera3).setPlayerBoat(newBoat); ((ChaseCamera) camera3).setPlayerBoat(newBoat, clientYacht);
((TopDownCamera) camera2).setPlayerBoat(newBoat);
} }
} }
Platform.runLater(() -> { Platform.runLater(() -> {
@@ -8,6 +8,7 @@ import javafx.scene.PerspectiveCamera;
import javafx.scene.transform.Rotate; import javafx.scene.transform.Rotate;
import javafx.scene.transform.Transform; import javafx.scene.transform.Transform;
import javafx.scene.transform.Translate; import javafx.scene.transform.Translate;
import seng302.model.ClientYacht;
import seng302.visualiser.fxObjects.assets_3D.BoatObject; import seng302.visualiser.fxObjects.assets_3D.BoatObject;
@@ -15,45 +16,41 @@ public class ChaseCamera extends PerspectiveCamera implements RaceCamera {
private ObservableList<Transform> transforms; private ObservableList<Transform> transforms;
private BoatObject playerBoat; private BoatObject playerBoat;
private ClientYacht playerYacht;
public ChaseCamera() { public ChaseCamera() {
super(true); super(true);
transforms = this.getTransforms(); transforms = this.getTransforms();
} }
public void setPlayerBoat(BoatObject playerBoat) { public void setPlayerBoat(BoatObject playerBoat, ClientYacht playerYacht) {
this.playerBoat = playerBoat; this.playerBoat = playerBoat;
this.playerYacht = playerYacht;
this.playerBoat.layoutXProperty().addListener(new ChangeListener<Number>() { this.playerBoat.layoutXProperty().addListener(new ChangeListener<Number>() {
@Override @Override
public void changed(ObservableValue<? extends Number> observable, Number oldValue, public void changed(ObservableValue<? extends Number> observable, Number oldValue,
Number newValue) { Number newValue) {
updateCameraX((Double) oldValue, (Double) newValue); repositionCamera();
} }
}); });
this.playerBoat.layoutYProperty().addListener(new ChangeListener<Number>() { this.playerBoat.layoutYProperty().addListener(new ChangeListener<Number>() {
@Override @Override
public void changed(ObservableValue<? extends Number> observable, Number oldValue, public void changed(ObservableValue<? extends Number> observable, Number oldValue,
Number newValue) { Number newValue) {
updateCameraY((Double) oldValue, (Double) newValue); repositionCamera();
} }
}); });
} }
private void repositionCamera() {
private void updateCameraX(Double oldXValue, Double newXValue) { transforms.clear();
if (transforms.size() == 0) { // boat is placed and then moved at start,
transforms.addAll( transforms.addAll(
new Translate(playerBoat.getLayoutX() - 30, playerBoat.getLayoutY() - 30, -125), new Translate(playerBoat.getLayoutX(), playerBoat.getLayoutY(), 0),
new Rotate(80, new Point3D(0, 0, 1)) new Rotate(playerYacht.getHeading(), new Point3D(0, 0, 1)),
new Rotate(60, new Point3D(1, 0, 0)),
new Translate(0, 0, -75)
); );
} else {
transforms.addAll(new Translate(newXValue - oldXValue, 0, 0));
}
}
private void updateCameraY(Double oldYValue, Double newYValue) {
transforms.addAll(new Translate(0, (newYValue - oldYValue), 0));
} }
@Override @Override
@@ -1,14 +1,18 @@
package seng302.visualiser.cameras; package seng302.visualiser.cameras;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.ObservableList; import javafx.collections.ObservableList;
import javafx.scene.PerspectiveCamera; import javafx.scene.PerspectiveCamera;
import javafx.scene.transform.Transform; import javafx.scene.transform.Transform;
import javafx.scene.transform.Translate; import javafx.scene.transform.Translate;
import seng302.visualiser.fxObjects.assets_3D.BoatObject;
public class TopDownCamera extends PerspectiveCamera implements RaceCamera { public class TopDownCamera extends PerspectiveCamera implements RaceCamera {
ObservableList<Transform> transforms; private ObservableList<Transform> transforms;
private BoatObject playerBoat;
public TopDownCamera() { public TopDownCamera() {
super(true); super(true);
@@ -16,6 +20,39 @@ public class TopDownCamera extends PerspectiveCamera implements RaceCamera {
transforms.add(new Translate(0, 0, -125)); transforms.add(new Translate(0, 0, -125));
} }
public void setPlayerBoat(BoatObject playerBoat) {
this.playerBoat = playerBoat;
this.playerBoat.layoutXProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> observable, Number oldValue,
Number newValue) {
updateCameraX((Double) oldValue, (Double) newValue);
}
});
this.playerBoat.layoutYProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> observable, Number oldValue,
Number newValue) {
updateCameraY((Double) oldValue, (Double) newValue);
}
});
}
private void updateCameraX(Double oldXValue, Double newXValue) {
if (transforms.size() == 0) { // boat is placed and then moved at start,
transforms.addAll(
new Translate(playerBoat.getLayoutX(), playerBoat.getLayoutY(), -125)
);
} else {
transforms.addAll(new Translate(newXValue - oldXValue, 0, 0));
}
}
private void updateCameraY(Double oldYValue, Double newYValue) {
transforms.addAll(new Translate(0, (newYValue - oldYValue), 0));
}
@Override @Override
public void zoomIn() { public void zoomIn() {
transforms.addAll(new Translate(0, 0, 1.5)); transforms.addAll(new Translate(0, 0, 1.5));