From e64e6ddbdb969541ed0e34a0ed17748e091cba5e Mon Sep 17 00:00:00 2001 From: Jessica Syder Date: Mon, 25 Sep 2017 11:41:42 +1300 Subject: [PATCH] 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); + } } /**