From f6cdf66bfee8c833a29247e3f6cac71e9b18fb21 Mon Sep 17 00:00:00 2001 From: Joseph Gardner Date: Mon, 7 Aug 2017 15:01:16 +1200 Subject: [PATCH] Sails can be toggled on the visualiser and the rotate sails button rotates the sail visually. #story[1098] --- .../src/main/java/shared/model/Boat.java | 11 +++++++ .../gameController/Keys/SailsToggleKey.java | 13 +++++++- .../visualiser/model/ResizableRaceCanvas.java | 18 +++++++--- .../main/java/visualiser/model/ThisBoat.java | 33 +++++++++++++++++++ 4 files changed, 69 insertions(+), 6 deletions(-) create mode 100644 racevisionGame/src/main/java/visualiser/model/ThisBoat.java diff --git a/racevisionGame/src/main/java/shared/model/Boat.java b/racevisionGame/src/main/java/shared/model/Boat.java index d6e28783..78b4aba6 100644 --- a/racevisionGame/src/main/java/shared/model/Boat.java +++ b/racevisionGame/src/main/java/shared/model/Boat.java @@ -90,6 +90,10 @@ public class Boat { @Nullable private ZonedDateTime timeAtLastMark; + /** + * The state of the boats sails. True if sails are out. + */ + private boolean sailsOut = false; /** * Constructs a boat object with a given sourceID, name, country/team abbreviation, and polars table. @@ -395,4 +399,11 @@ public class Boat { this.timeAtLastMark = timeAtLastMark; } + public void setSailsOut(boolean sailsOut) { + this.sailsOut = sailsOut; + } + + public boolean isSailsOut() { + return sailsOut; + } } diff --git a/racevisionGame/src/main/java/visualiser/gameController/Keys/SailsToggleKey.java b/racevisionGame/src/main/java/visualiser/gameController/Keys/SailsToggleKey.java index bc9b81a6..d30a7bb8 100644 --- a/racevisionGame/src/main/java/visualiser/gameController/Keys/SailsToggleKey.java +++ b/racevisionGame/src/main/java/visualiser/gameController/Keys/SailsToggleKey.java @@ -1,5 +1,7 @@ package visualiser.gameController.Keys; +import visualiser.model.ThisBoat; + /** * Key to toggle the sails */ @@ -19,7 +21,16 @@ public class SailsToggleKey extends ControlKey { */ @Override public void onAction() { - protocolCode = protocolCode == 2? 3 : 2; +// 2 = Sails in +// 3 = Sails out + if (ThisBoat.getInstance().isSailsOut()) { + protocolCode = 3; + ThisBoat.getInstance().setSailsOut(false); + } else { + protocolCode = 2; + ThisBoat.getInstance().setSailsOut(true); + } + } @Override diff --git a/racevisionGame/src/main/java/visualiser/model/ResizableRaceCanvas.java b/racevisionGame/src/main/java/visualiser/model/ResizableRaceCanvas.java index 5078c2d9..e0538b39 100644 --- a/racevisionGame/src/main/java/visualiser/model/ResizableRaceCanvas.java +++ b/racevisionGame/src/main/java/visualiser/model/ResizableRaceCanvas.java @@ -305,8 +305,7 @@ public class ResizableRaceCanvas extends ResizableCanvas { gc.fillPolygon(x, y, 3); gc.restore(); - // TODO: update with current players boat - if (boat.getSourceID() == 125) { + if (boat.getSourceID() == ThisBoat.getInstance().getSourceID()) { drawSails(boat); } } @@ -331,9 +330,9 @@ public class ResizableRaceCanvas extends ResizableCanvas { gc.save(); // right half of points of sail - if (boatBearing<180) { + if (boatBearing < 180) { sailImage = sailsRight; - sailRotateAngle = boatBearing * 0.5; // math + sailRotateAngle = boatBearing; // math xPos -= 1; // right align to boat edge on canvas // System.out.println("right side -- boat: " + boatBearing + // "|| rotate: " + sailRotateAngle); @@ -341,12 +340,21 @@ public class ResizableRaceCanvas extends ResizableCanvas { // left half of points of sail else { sailImage = sailsLeft; - sailRotateAngle = -(360 - boatBearing) * 0.5; // math + sailRotateAngle = -(360 - boatBearing); // math xPos -= 5; // left align to boat edge on canvas // System.out.println("left side -- boat: " + boatBearing + // "|| rotate: " + sailRotateAngle); } + // Change the angle of the sail if the sail is out + if (ThisBoat.getInstance().isSailsOut()) { + if (boatBearing < 180) { + sailRotateAngle -= 90; + } else { + sailRotateAngle += 90; + } + } + // rotate sails based on boats current heading rotate(sailRotateAngle, boatPos.getX(), boatPos.getY()); gc.drawImage(sailImage, xPos, yPos); diff --git a/racevisionGame/src/main/java/visualiser/model/ThisBoat.java b/racevisionGame/src/main/java/visualiser/model/ThisBoat.java new file mode 100644 index 00000000..a4660d07 --- /dev/null +++ b/racevisionGame/src/main/java/visualiser/model/ThisBoat.java @@ -0,0 +1,33 @@ +package visualiser.model; + +/** + * The properties of the boat currently being controlled by the player. Singleton. + */ +public class ThisBoat { + // TODO Initialise sourceID to the sourceID given by the network + private int sourceID = 125; + private boolean sailsOut = false; + private static ThisBoat instance = new ThisBoat(); + + private ThisBoat(){} + + public static ThisBoat getInstance(){ + return instance; + } + + public void setSailsOut(boolean sailsOut) { + this.sailsOut = sailsOut; + } + + public void setSourceID(int sourceID) { + this.sourceID = sourceID; + } + + public boolean isSailsOut() { + return sailsOut; + } + + public int getSourceID() { + return sourceID; + } +}