From 1ecd2dd7b636b1b84914e675766fb36fca6c2464 Mon Sep 17 00:00:00 2001 From: Jessica Syder Date: Fri, 22 Sep 2017 12:59:44 +1200 Subject: [PATCH 1/6] Zooming motion is more natural. - added limits for zoom in, zoom out and when to change to birds eye - zooming smoothed by adjusting pitch each zoom - when zoom out limit is reached, view returns to original #story[1312] --- .../Controllers/RaceViewController.java | 6 +- .../main/java/visualiser/layout/View3D.java | 59 +++++++++++++++---- 2 files changed, 51 insertions(+), 14 deletions(-) diff --git a/racevisionGame/src/main/java/visualiser/Controllers/RaceViewController.java b/racevisionGame/src/main/java/visualiser/Controllers/RaceViewController.java index c2153c1f..c8c9ebb5 100644 --- a/racevisionGame/src/main/java/visualiser/Controllers/RaceViewController.java +++ b/racevisionGame/src/main/java/visualiser/Controllers/RaceViewController.java @@ -369,7 +369,8 @@ public class RaceViewController extends Controller { } } } - view3D.updateDistance(-10); +// view3D.updateDistance(-10); + view3D.zoomIn(); break; case "Zoom Out": //Check if race is a tutorial @@ -384,7 +385,8 @@ public class RaceViewController extends Controller { } } } - view3D.updateDistance(10); +// view3D.updateDistance(10); + view3D.zoomOut(); break; } } diff --git a/racevisionGame/src/main/java/visualiser/layout/View3D.java b/racevisionGame/src/main/java/visualiser/layout/View3D.java index e9069c5d..28a2a854 100644 --- a/racevisionGame/src/main/java/visualiser/layout/View3D.java +++ b/racevisionGame/src/main/java/visualiser/layout/View3D.java @@ -3,7 +3,6 @@ package visualiser.layout; import javafx.animation.AnimationTimer; import javafx.beans.property.ObjectProperty; import javafx.beans.property.SimpleObjectProperty; -import javafx.beans.value.ChangeListener; import javafx.collections.ListChangeListener; import javafx.collections.ObservableList; import javafx.scene.*; @@ -78,11 +77,15 @@ public class View3D extends Pane { /** * Distance to switch from third person to bird's eye */ - private final double THIRD_PERSON_LIMIT = 100; + private final double THIRD_PERSON_LIMIT = 200; /** * Distance to stop zoom */ - private final double FIRST_PERSON_LIMIT = 2; + private final double ZOOM_IN_LIMIT = 30; + private final double ZOOM_OUT_LIMIT = 700; + private final double MAX_PITCH = 60; // birds eye view + private final double MIN_PITCH = 10; // third person view + private final double ZOOM_PER_KEYPRESS = 5; // distance changed per zoom /** * Default constructor for View3D. Sets up Scene and PerspectiveCamera. @@ -183,11 +186,11 @@ public class View3D extends Pane { * Configures camera to third person view */ public void setThirdPerson() { - this.setDistance(THIRD_PERSON_LIMIT / 2); - this.setPitch(10); + this.setDistance(ZOOM_IN_LIMIT * 2); + adjustPitchForZoom(); for(Subject3D item: items) { - item.setScale(0.1); + item.setScale(1); } } @@ -269,15 +272,47 @@ public class View3D extends Pane { public void updateDistance(double delta) { double distance = -this.distance.getZ() + delta; - if(distance <= FIRST_PERSON_LIMIT) { - this.setDistance(FIRST_PERSON_LIMIT); - } else if(distance > THIRD_PERSON_LIMIT) { - this.setDistance(distance); + if(distance <= ZOOM_IN_LIMIT) { + setDistance(ZOOM_IN_LIMIT); + } else if (distance > ZOOM_OUT_LIMIT){ untrackSubject(); - setBirdsEye(); + setDistance(1050); + updatePivot(new Translate(250, 0, 210)); } else { - this.setDistance(distance); + setDistance(distance); } + adjustPitchForZoom(); + } + + /** + * Adjusts the pitch as a user zooms in or out, to smooth the change + * between third person to birds eye view. + */ + private void adjustPitchForZoom(){ + double pitch = (((-distance.getZ() - ZOOM_IN_LIMIT) / + ((THIRD_PERSON_LIMIT - ZOOM_IN_LIMIT) / (MAX_PITCH - MIN_PITCH))) + MIN_PITCH); + + // if pitch is out of bounds, set it to the min/max + if (pitch < MIN_PITCH) { + pitch = MIN_PITCH; + } else if (pitch > MAX_PITCH){ + pitch = MAX_PITCH; + } + setPitch(pitch); + } + + /** + * Method to be called when the zoom in key is pressed. + */ + public void zoomIn(){ + updateDistance(-ZOOM_PER_KEYPRESS); + } + + /** + * Method to be called when the zoom out key is pressed. + */ + public void zoomOut(){ + updateDistance(ZOOM_PER_KEYPRESS); } /** From 62535720d419d70016594405ec12f91b801ddf30 Mon Sep 17 00:00:00 2001 From: Jessica Syder Date: Fri, 22 Sep 2017 13:04:42 +1200 Subject: [PATCH 2/6] Removed commented out code. #story[1312] --- .../main/java/visualiser/Controllers/RaceViewController.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/racevisionGame/src/main/java/visualiser/Controllers/RaceViewController.java b/racevisionGame/src/main/java/visualiser/Controllers/RaceViewController.java index 2caacce3..edbbd248 100644 --- a/racevisionGame/src/main/java/visualiser/Controllers/RaceViewController.java +++ b/racevisionGame/src/main/java/visualiser/Controllers/RaceViewController.java @@ -373,7 +373,6 @@ public class RaceViewController extends Controller { } } } -// view3D.updateDistance(-10); view3D.zoomIn(); break; case "Zoom Out": @@ -389,7 +388,6 @@ public class RaceViewController extends Controller { } } } -// view3D.updateDistance(10); view3D.zoomOut(); break; } From 86fc911f98c9cf38762cbfafeb5a7cf6e7eb84c8 Mon Sep 17 00:00:00 2001 From: Jessica Syder Date: Fri, 22 Sep 2017 13:32:52 +1200 Subject: [PATCH 3/6] Minor changes to improve look of third person view. #story[1312] --- .../src/main/java/visualiser/layout/View3D.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/racevisionGame/src/main/java/visualiser/layout/View3D.java b/racevisionGame/src/main/java/visualiser/layout/View3D.java index 28a2a854..870ba102 100644 --- a/racevisionGame/src/main/java/visualiser/layout/View3D.java +++ b/racevisionGame/src/main/java/visualiser/layout/View3D.java @@ -77,14 +77,14 @@ public class View3D extends Pane { /** * Distance to switch from third person to bird's eye */ - private final double THIRD_PERSON_LIMIT = 200; + private final double THIRD_PERSON_LIMIT = 500; /** * Distance to stop zoom */ private final double ZOOM_IN_LIMIT = 30; private final double ZOOM_OUT_LIMIT = 700; private final double MAX_PITCH = 60; // birds eye view - private final double MIN_PITCH = 10; // third person view + private final double MIN_PITCH = 5; // third person view private final double ZOOM_PER_KEYPRESS = 5; // distance changed per zoom /** @@ -289,8 +289,9 @@ public class View3D extends Pane { * between third person to birds eye view. */ private void adjustPitchForZoom(){ - double pitch = (((-distance.getZ() - ZOOM_IN_LIMIT) / - ((THIRD_PERSON_LIMIT - ZOOM_IN_LIMIT) / (MAX_PITCH - MIN_PITCH))) + MIN_PITCH); + double pitch = (((-distance.getZ() - (ZOOM_IN_LIMIT*2)) / + ((THIRD_PERSON_LIMIT - (ZOOM_IN_LIMIT*2)) / (MAX_PITCH - + MIN_PITCH))) + MIN_PITCH); // if pitch is out of bounds, set it to the min/max if (pitch < MIN_PITCH) { From e64e6ddbdb969541ed0e34a0ed17748e091cba5e Mon Sep 17 00:00:00 2001 From: Jessica Syder Date: Mon, 25 Sep 2017 11:41:42 +1300 Subject: [PATCH 4/6] Boat scaling is correct. - scaling changes as a user zooms in or out to - 3rd person view defaults to life size scale #story[1312] --- .../main/java/visualiser/layout/View3D.java | 38 ++++++++++++++----- 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/racevisionGame/src/main/java/visualiser/layout/View3D.java b/racevisionGame/src/main/java/visualiser/layout/View3D.java index 870ba102..30502203 100644 --- a/racevisionGame/src/main/java/visualiser/layout/View3D.java +++ b/racevisionGame/src/main/java/visualiser/layout/View3D.java @@ -86,6 +86,7 @@ public class View3D extends Pane { private final double MAX_PITCH = 60; // birds eye view private final double MIN_PITCH = 5; // third person view private final double ZOOM_PER_KEYPRESS = 5; // distance changed per zoom + private double itemScale = 1; /** * Default constructor for View3D. Sets up Scene and PerspectiveCamera. @@ -188,10 +189,7 @@ public class View3D extends Pane { public void setThirdPerson() { this.setDistance(ZOOM_IN_LIMIT * 2); adjustPitchForZoom(); - - for(Subject3D item: items) { - item.setScale(1); - } + adjustScaleForZoom(); } /** @@ -199,11 +197,8 @@ public class View3D extends Pane { */ public void setBirdsEye() { this.setYaw(0); - this.setPitch(60); - - for(Subject3D item: items) { - item.setScale(1); - } + this.setPitch(MAX_PITCH); + adjustScaleForZoom(); } /** @@ -278,10 +273,35 @@ public class View3D extends Pane { untrackSubject(); setDistance(1050); updatePivot(new Translate(250, 0, 210)); + setYaw(0); } else { setDistance(distance); } adjustPitchForZoom(); + adjustScaleForZoom(); + } + + /** + * Adjusts the scale size of boats and markers as a user zooms in or out, + * to smooth the change between third person to birds eye view. + */ + private void adjustScaleForZoom(){ + double itemScale = (((-distance.getZ() - (ZOOM_IN_LIMIT * 2)) / + ((THIRD_PERSON_LIMIT - (ZOOM_IN_LIMIT * 2)) / + (1 - 0.1))) + 0.1); + // if zoomed right in + if (itemScale < 0.1){ + itemScale = 0.1; + // if zoomed right out + } else if (itemScale > 1) { + System.out.println("over 1"); + itemScale = 1; + } + + // update scale + for (Subject3D item : items) { + item.setScale(itemScale); + } } /** From ab49d62c0db139cab51c6f41106286ae2956ed7f Mon Sep 17 00:00:00 2001 From: Jessica Syder Date: Mon, 25 Sep 2017 12:17:37 +1300 Subject: [PATCH 5/6] Map can be zoomed in / out at all times. - map can be zoomed when object is not selected #story[1312] --- .../src/main/java/visualiser/layout/View3D.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/racevisionGame/src/main/java/visualiser/layout/View3D.java b/racevisionGame/src/main/java/visualiser/layout/View3D.java index 30502203..efe8bda2 100644 --- a/racevisionGame/src/main/java/visualiser/layout/View3D.java +++ b/racevisionGame/src/main/java/visualiser/layout/View3D.java @@ -204,7 +204,7 @@ public class View3D extends Pane { /** * Stop camera from following the last selected subject */ - private void untrackSubject() { + public void untrackSubject() { if(target.get() != null) { trackBoat.stop(); target.setValue(null); @@ -215,7 +215,7 @@ public class View3D extends Pane { * Set camera to follow the selected subject * @param subject to track */ - private void trackSubject(Subject3D subject) { + public void trackSubject(Subject3D subject) { target.set(subject); this.trackBoat = new AnimationTimer() { @@ -265,17 +265,18 @@ public class View3D extends Pane { * @param delta amount to change distance by */ public void updateDistance(double delta) { - double distance = -this.distance.getZ() + delta; - - if(distance <= ZOOM_IN_LIMIT) { + double newDistance = -this.distance.getZ() + delta; + if (target.get() == null){ + setDistance(newDistance); + } else if(newDistance <= ZOOM_IN_LIMIT) { setDistance(ZOOM_IN_LIMIT); - } else if (distance > ZOOM_OUT_LIMIT){ + } else if (newDistance > ZOOM_OUT_LIMIT){ untrackSubject(); setDistance(1050); updatePivot(new Translate(250, 0, 210)); setYaw(0); } else { - setDistance(distance); + setDistance(newDistance); } adjustPitchForZoom(); adjustScaleForZoom(); @@ -294,7 +295,6 @@ public class View3D extends Pane { itemScale = 0.1; // if zoomed right out } else if (itemScale > 1) { - System.out.println("over 1"); itemScale = 1; } From 915d61b9f34ba999062fb3f19f003ddcfa9a72c1 Mon Sep 17 00:00:00 2001 From: Jessica Syder Date: Mon, 25 Sep 2017 12:35:46 +1300 Subject: [PATCH 6/6] Map can be zoomed out in birds eye view only to a specified distance. #story[1312] --- racevisionGame/src/main/java/visualiser/layout/View3D.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/racevisionGame/src/main/java/visualiser/layout/View3D.java b/racevisionGame/src/main/java/visualiser/layout/View3D.java index efe8bda2..2b5d7638 100644 --- a/racevisionGame/src/main/java/visualiser/layout/View3D.java +++ b/racevisionGame/src/main/java/visualiser/layout/View3D.java @@ -83,6 +83,7 @@ public class View3D extends Pane { */ private final double ZOOM_IN_LIMIT = 30; private final double ZOOM_OUT_LIMIT = 700; + private final double MAX_ZOOM_LIMIT = 1500; private final double MAX_PITCH = 60; // birds eye view private final double MIN_PITCH = 5; // third person view private final double ZOOM_PER_KEYPRESS = 5; // distance changed per zoom @@ -267,7 +268,11 @@ public class View3D extends Pane { public void updateDistance(double delta) { double newDistance = -this.distance.getZ() + delta; if (target.get() == null){ - setDistance(newDistance); + if (newDistance > MAX_ZOOM_LIMIT){ + setDistance(MAX_ZOOM_LIMIT); + } else { + setDistance(newDistance); + } } else if(newDistance <= ZOOM_IN_LIMIT) { setDistance(ZOOM_IN_LIMIT); } else if (newDistance > ZOOM_OUT_LIMIT){