From f97b18d594424b39fc498a56e8050a32d1747e10 Mon Sep 17 00:00:00 2001 From: Kusal Ekanayake Date: Mon, 7 Aug 2017 16:48:30 +1200 Subject: [PATCH] Sailsin graphics moving and working as expected. #story[1111] #pair[kre39,ptg19] --- .../visualiser/fxObjects/BoatObject.java | 44 +++++++++++++++---- .../map/BoatSailAnimationToggleTest.java | 2 - 2 files changed, 36 insertions(+), 10 deletions(-) diff --git a/src/main/java/seng302/visualiser/fxObjects/BoatObject.java b/src/main/java/seng302/visualiser/fxObjects/BoatObject.java index 10830cbb..76180bf8 100644 --- a/src/main/java/seng302/visualiser/fxObjects/BoatObject.java +++ b/src/main/java/seng302/visualiser/fxObjects/BoatObject.java @@ -130,9 +130,9 @@ public class BoatObject extends Group { boatPoly.setLayoutX(x); boatPoly.setLayoutY(y); if (sailIn) { - sail.getPoints().clear(); +// sail.getPoints().clear(); // sail.getPoints().addAll(0.0, 0.0, 4.0, 1.5, 8.0, 3.0, 12.0, 3.5, 16.0, 3.0, 20.0, 1.5, 24.0, 0.0); - sail.getPoints().addAll(0.0, 0.0, 24.0, 0.0); +// sail.getPoints().addAll(0.0, 0.0, 24.0, 0.0); sail.setLayoutX(x); sail.setLayoutY(y); } else { @@ -164,13 +164,41 @@ public class BoatObject extends Group { } } - private void rotateTo(double rotation, boolean sailsIn, double windDir) { - boatPoly.getTransforms().setAll(new Rotate(rotation)); + private Double normalizeHeading(double heading, double windDirection) { + Double normalizedHeading = heading - windDirection; + normalizedHeading = (double) Math.floorMod(normalizedHeading.longValue(), 360L); + return normalizedHeading; + } + + + private void rotateTo(double heading, boolean sailsIn, double windDir) { + boatPoly.getTransforms().setAll(new Rotate(heading)); if (sailsIn) { - sail.getTransforms().setAll(new Rotate(windDir + 90)); - - - + Double sailWindOffset = 30.0; + Double upwindAngleLimit = 15.0; + Double downwindAngleLimit = 10.0; //Upwind from normalised horizontal + Double normalizedHeading = normalizeHeading(heading, windDir); + if (normalizedHeading < 180) { + sail.getTransforms().setAll(new Rotate(windDir + 90 + sailWindOffset)); + sail.getPoints().clear(); + sail.getPoints().addAll(0.0, 0.0, 4.0, -1.5, 8.0, -3.0, 12.0, -3.5, 16.0, -3.0, 20.0, -1.5, 24.0, 0.0); + if (normalizedHeading > 90 + sailWindOffset){ + sail.getTransforms().setAll(new Rotate(heading + downwindAngleLimit)); + } + if (normalizedHeading < sailWindOffset + upwindAngleLimit){ + sail.getTransforms().setAll(new Rotate(heading + 90 - upwindAngleLimit)); + } + } else { + sail.getTransforms().setAll(new Rotate(windDir + 90 - sailWindOffset)); + sail.getPoints().clear(); + sail.getPoints().addAll(0.0, 0.0, 4.0, 1.5, 8.0, 3.0, 12.0, 3.5, 16.0, 3.0, 20.0, 1.5, 24.0, 0.0); + if (normalizedHeading < 270 - sailWindOffset){ + sail.getTransforms().setAll(new Rotate(heading + 180 - downwindAngleLimit)); + } + if (normalizedHeading > 360 - (sailWindOffset + upwindAngleLimit)){ + sail.getTransforms().setAll(new Rotate(heading + 90 + upwindAngleLimit)); + } + } } else { sail.getTransforms().setAll(new Rotate(windDir)); } diff --git a/src/test/java/seng302/visualiser/map/BoatSailAnimationToggleTest.java b/src/test/java/seng302/visualiser/map/BoatSailAnimationToggleTest.java index 0f353701..48d3fda8 100644 --- a/src/test/java/seng302/visualiser/map/BoatSailAnimationToggleTest.java +++ b/src/test/java/seng302/visualiser/map/BoatSailAnimationToggleTest.java @@ -25,10 +25,8 @@ public class BoatSailAnimationToggleTest { @Test public void sailToggleTest() throws Exception { - assertFalse(yacht.getClientSailsIn()); assertFalse(yacht.getSailIn()); yacht.toggleClientSail(); - assertTrue(yacht.getClientSailsIn()); assertFalse(yacht.getSailIn()); }