diff --git a/src/main/java/seng302/visualiser/GameView3D.java b/src/main/java/seng302/visualiser/GameView3D.java index f6f6b953..7c3fff69 100644 --- a/src/main/java/seng302/visualiser/GameView3D.java +++ b/src/main/java/seng302/visualiser/GameView3D.java @@ -438,16 +438,16 @@ public class GameView3D { ((RaceCamera) view.getCamera()).zoomOut(); break; case W: - view.getCamera().getTransforms().addAll(new Translate(0, -1, 0)); + ((RaceCamera) view.getCamera()).panUp(); break; case S: - view.getCamera().getTransforms().addAll(new Translate(0, 1, 0)); + ((RaceCamera) view.getCamera()).panDown(); break; case A: - view.getCamera().getTransforms().addAll(new Translate(-1, 0, 0)); + ((RaceCamera) view.getCamera()).panLeft(); break; case D: - view.getCamera().getTransforms().addAll(new Translate(1, 0, 0)); + ((RaceCamera) view.getCamera()).panRight(); break; case F1: if (view.getCamera().equals(camera)) { @@ -499,7 +499,8 @@ public class GameView3D { if (clientYacht.getSourceId().equals( ViewManager.getInstance().getGameClient().getServerThread().getClientId())) { - ((ChaseCamera) camera3).setPlayerBoat(newBoat); + ((ChaseCamera) camera3).setPlayerBoat(newBoat, clientYacht); + ((TopDownCamera) camera2).setPlayerBoat(newBoat); } } Platform.runLater(() -> { diff --git a/src/main/java/seng302/visualiser/cameras/ChaseCamera.java b/src/main/java/seng302/visualiser/cameras/ChaseCamera.java index 1d0a0648..466e86fa 100644 --- a/src/main/java/seng302/visualiser/cameras/ChaseCamera.java +++ b/src/main/java/seng302/visualiser/cameras/ChaseCamera.java @@ -8,6 +8,7 @@ import javafx.scene.PerspectiveCamera; import javafx.scene.transform.Rotate; import javafx.scene.transform.Transform; import javafx.scene.transform.Translate; +import seng302.model.ClientYacht; import seng302.visualiser.fxObjects.assets_3D.BoatObject; @@ -15,45 +16,41 @@ public class ChaseCamera extends PerspectiveCamera implements RaceCamera { private ObservableList transforms; private BoatObject playerBoat; + private ClientYacht playerYacht; + public ChaseCamera() { super(true); transforms = this.getTransforms(); } - public void setPlayerBoat(BoatObject playerBoat) { + public void setPlayerBoat(BoatObject playerBoat, ClientYacht playerYacht) { this.playerBoat = playerBoat; - + this.playerYacht = playerYacht; this.playerBoat.layoutXProperty().addListener(new ChangeListener() { @Override public void changed(ObservableValue observable, Number oldValue, Number newValue) { - updateCameraX((Double) oldValue, (Double) newValue); + repositionCamera(); } }); this.playerBoat.layoutYProperty().addListener(new ChangeListener() { @Override public void changed(ObservableValue observable, Number oldValue, Number newValue) { - updateCameraY((Double) oldValue, (Double) newValue); + repositionCamera(); } }); } - - 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() - 30, playerBoat.getLayoutY() - 30, -125), - new Rotate(80, new Point3D(0, 0, 1)) - ); - } else { - transforms.addAll(new Translate(newXValue - oldXValue, 0, 0)); - } - } - - private void updateCameraY(Double oldYValue, Double newYValue) { - transforms.addAll(new Translate(0, (newYValue - oldYValue), 0)); + private void repositionCamera() { + transforms.clear(); + transforms.addAll( + 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) + ); } @Override diff --git a/src/main/java/seng302/visualiser/cameras/TopDownCamera.java b/src/main/java/seng302/visualiser/cameras/TopDownCamera.java index 624ae478..af17d553 100644 --- a/src/main/java/seng302/visualiser/cameras/TopDownCamera.java +++ b/src/main/java/seng302/visualiser/cameras/TopDownCamera.java @@ -1,14 +1,18 @@ package seng302.visualiser.cameras; +import javafx.beans.value.ChangeListener; +import javafx.beans.value.ObservableValue; import javafx.collections.ObservableList; import javafx.scene.PerspectiveCamera; import javafx.scene.transform.Transform; import javafx.scene.transform.Translate; +import seng302.visualiser.fxObjects.assets_3D.BoatObject; public class TopDownCamera extends PerspectiveCamera implements RaceCamera { - ObservableList transforms; + private ObservableList transforms; + private BoatObject playerBoat; public TopDownCamera() { super(true); @@ -16,6 +20,39 @@ public class TopDownCamera extends PerspectiveCamera implements RaceCamera { transforms.add(new Translate(0, 0, -125)); } + public void setPlayerBoat(BoatObject playerBoat) { + this.playerBoat = playerBoat; + this.playerBoat.layoutXProperty().addListener(new ChangeListener() { + @Override + public void changed(ObservableValue observable, Number oldValue, + Number newValue) { + updateCameraX((Double) oldValue, (Double) newValue); + } + }); + this.playerBoat.layoutYProperty().addListener(new ChangeListener() { + @Override + public void changed(ObservableValue 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 public void zoomIn() { transforms.addAll(new Translate(0, 0, 1.5));