- Isometric Camera

- Zoom Bounds added.
 - Camera Panning Bounds added. Need to be tested with extra maps.

tags : #story[1273]
This commit is contained in:
Alistair McIntyre
2017-09-26 16:57:07 +13:00
parent 2e7487fdfc
commit 1a53579317
2 changed files with 62 additions and 19 deletions
@@ -49,7 +49,6 @@ import seng302.visualiser.fxObjects.assets_3D.ModelType;
public class GameView3D { public class GameView3D {
private final double FOV = 60; private final double FOV = 60;
private final double DEFAULT_CAMERA_DEPTH = -125;
private final double DEFAULT_CAMERA_X = 0; private final double DEFAULT_CAMERA_X = 0;
private final double DEFAULT_CAMERA_Y = 155; private final double DEFAULT_CAMERA_Y = 155;
@@ -96,8 +95,7 @@ public class GameView3D {
} }
public GameView3D () { public GameView3D () {
isometricCam = new IsometricCamera(DEFAULT_CAMERA_X, DEFAULT_CAMERA_Y, isometricCam = new IsometricCamera(DEFAULT_CAMERA_X, DEFAULT_CAMERA_Y);
DEFAULT_CAMERA_DEPTH);
topDownCam = new TopDownCamera(); topDownCam = new TopDownCamera();
chaseCam = new ChaseCamera(); chaseCam = new ChaseCamera();
@@ -113,8 +111,6 @@ public class GameView3D {
root3D, 1000, 1000, true, SceneAntialiasing.BALANCED root3D, 1000, 1000, true, SceneAntialiasing.BALANCED
); );
view.setCamera(isometricCam); view.setCamera(isometricCam);
isometricCam.getTransforms()
.add(new Rotate(30, new Point3D(1, 0, 0))); //todo: move this into isometric cam?
gameObjects.getChildren().addAll( gameObjects.getChildren().addAll(
ModelFactory.importModel(ModelType.OCEAN).getAssets(), ModelFactory.importModel(ModelType.OCEAN).getAssets(),
@@ -1,54 +1,101 @@
package seng302.visualiser.cameras; package seng302.visualiser.cameras;
import javafx.collections.ObservableList; import javafx.collections.ObservableList;
import javafx.geometry.Point3D;
import javafx.scene.PerspectiveCamera; import javafx.scene.PerspectiveCamera;
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;
public class IsometricCamera extends PerspectiveCamera implements RaceCamera { public class IsometricCamera extends PerspectiveCamera implements RaceCamera {
private final Double PAN_LIMIT = 50.0; private final Double MIN_X = -120.0;
private final Double NEAR_ZOOM_LIMIT = -15.0; private final Double MAX_X = 125.0;
private final Double FAR_ZOOM_LIMIT = -125.0;
private Double horizontalAdjustment; private final Double MIN_Y = 40.0;
private Double verticalAdjustment; private final Double MAX_Y = 170.0;
ObservableList<Transform> transforms; private final Double PAN_LIMIT = 160.0;
private final Double NEAR_ZOOM_LIMIT = -50.0;
private final Double FAR_ZOOM_LIMIT = -160.0;
public IsometricCamera(Double cameraStartX, Double cameraStartY, Double cameraDepth) { private Double horizontalPan;
private Double verticalPan;
private Double zoomFactor;
private ObservableList<Transform> transforms;
public IsometricCamera(Double cameraStartX, Double cameraStartY) {
super(true); super(true);
transforms = this.getTransforms(); transforms = this.getTransforms();
transforms.addAll(new Translate(cameraStartX, cameraStartY, cameraDepth));
zoomFactor = (FAR_ZOOM_LIMIT + NEAR_ZOOM_LIMIT) / 2.0;
horizontalPan = cameraStartX;
verticalPan = cameraStartY;
updateCamera();
}
private void updateCamera() {
System.out.println("----");
System.out.println(horizontalPan);
System.out.println(verticalPan);
System.out.println("----");
transforms.clear();
transforms.addAll(
new Translate(horizontalPan, verticalPan, zoomFactor),
new Rotate(30, new Point3D(1, 0, 0))
);
}
private void adjustZoomFactor(Double adjustment) {
if (zoomFactor + adjustment < NEAR_ZOOM_LIMIT && zoomFactor + adjustment > FAR_ZOOM_LIMIT) {
zoomFactor = zoomFactor + adjustment;
updateCamera();
}
}
private void adjustVerticalPan(Double adjustment) {
if (verticalPan + adjustment >= MIN_Y && verticalPan + adjustment <= MAX_Y) {
verticalPan += adjustment;
updateCamera();
}
}
private void adjustHorizontalPan(Double adjustment) {
if (horizontalPan + adjustment >= MIN_X && horizontalPan + adjustment <= MIN_Y) {
this.horizontalPan += adjustment;
updateCamera();
}
} }
@Override @Override
public void zoomIn() { public void zoomIn() {
transforms.addAll(new Translate(0, 0, 1.5)); adjustZoomFactor(-2.5);
} }
@Override @Override
public void zoomOut() { public void zoomOut() {
transforms.addAll(new Translate(0, 0, -1.5)); adjustZoomFactor(2.5);
} }
@Override @Override
public void panLeft() { public void panLeft() {
transforms.addAll(new Translate(-1, 0, 0)); adjustHorizontalPan(-2.5);
} }
@Override @Override
public void panRight() { public void panRight() {
transforms.addAll(new Translate(1, 0, 0)); adjustHorizontalPan(2.5);
} }
@Override @Override
public void panUp() { public void panUp() {
transforms.addAll(new Translate(0, -1, 0)); adjustVerticalPan(-2.5);
} }
@Override @Override
public void panDown() { public void panDown() {
transforms.addAll(new Translate(0, 1, 0)); adjustVerticalPan(2.5);
} }
} }