From faeece27ff508bac94aa5ac39a1fc8154672c512 Mon Sep 17 00:00:00 2001 From: Kusal Ekanayake Date: Fri, 22 Sep 2017 13:52:35 +1200 Subject: [PATCH 1/8] Started working on individual boat stats. Already modified turning rate. Need to add a vsual component. #story[1274] --- .../java/seng302/gameServer/GameState.java | 1 + src/main/java/seng302/model/ServerYacht.java | 45 ++++++++++--------- 2 files changed, 26 insertions(+), 20 deletions(-) diff --git a/src/main/java/seng302/gameServer/GameState.java b/src/main/java/seng302/gameServer/GameState.java index 41c619b7..4a93f0d5 100644 --- a/src/main/java/seng302/gameServer/GameState.java +++ b/src/main/java/seng302/gameServer/GameState.java @@ -453,6 +453,7 @@ public class GameState implements Runnable { if (yacht.getPowerUp() != null) { if (yacht.getPowerUp().equals(TokenType.BOOST)) { // TODO: 11/09/17 wmu16 CHANGE THIS TO MAGIC NUMBER + // TODO 22/09/17 kre39 change this magic number to a variable maxBoatSpeed *= 2; } } diff --git a/src/main/java/seng302/model/ServerYacht.java b/src/main/java/seng302/model/ServerYacht.java index 80566afd..f9e028d4 100644 --- a/src/main/java/seng302/model/ServerYacht.java +++ b/src/main/java/seng302/model/ServerYacht.java @@ -8,10 +8,9 @@ import seng302.gameServer.messages.BoatStatus; import seng302.model.mark.Mark; import seng302.model.token.TokenType; import seng302.utilities.GeoUtility; +import seng302.visualiser.fxObjects.assets_3D.BoatMeshType; import java.util.HashMap; -import java.util.Observable; -import java.util.Observer; /** * Yacht class for the racing boat.

Class created to store more variables (eg. boat statuses) @@ -22,10 +21,9 @@ public class ServerYacht { private Logger logger = LoggerFactory.getLogger(ClientYacht.class); - public static final Double TURN_STEP = 5.0; - //Boat info private String boatType; + private Double turn_step; private Integer sourceId; private String hullID; //matches HullNum in the XML spec. private String shortName; @@ -59,7 +57,7 @@ public class ServerYacht { public ServerYacht(String boatType, Integer sourceId, String hullID, String shortName, String boatName, String country) { - this.boatType = boatType; + setBoatType(boatType); this.boatStatus = BoatStatus.PRESTART; this.sourceId = sourceId; this.hullID = hullID; @@ -174,7 +172,7 @@ public class ServerYacht { if (isAuto) { turnTowardsHeading(autoHeading); if (Math.abs(heading - autoHeading) - <= TURN_STEP) { //Cancel when within 1 turn step of target. + <= turn_step) { //Cancel when within 1 turn step of target. isAuto = false; } } @@ -189,20 +187,20 @@ public class ServerYacht { Double normalizedHeading = normalizeHeading(); if (normalizedHeading == 0) { if (lastHeading < 180) { - adjustHeading(-TURN_STEP); + adjustHeading(-turn_step); } else { - adjustHeading(TURN_STEP); + adjustHeading(turn_step); } } else if (normalizedHeading == 180) { if (lastHeading < 180) { - adjustHeading(TURN_STEP); + adjustHeading(turn_step); } else { - adjustHeading(-TURN_STEP); + adjustHeading(-turn_step); } } else if (normalizedHeading < 180) { - adjustHeading(-TURN_STEP); + adjustHeading(-turn_step); } else { - adjustHeading(TURN_STEP); + adjustHeading(turn_step); } } @@ -211,20 +209,20 @@ public class ServerYacht { Double normalizedHeading = normalizeHeading(); if (normalizedHeading == 0) { if (lastHeading < 180) { - adjustHeading(TURN_STEP); + adjustHeading(turn_step); } else { - adjustHeading(-TURN_STEP); + adjustHeading(-turn_step); } } else if (normalizedHeading == 180) { if (lastHeading < 180) { - adjustHeading(-TURN_STEP); + adjustHeading(-turn_step); } else { - adjustHeading(TURN_STEP); + adjustHeading(turn_step); } } else if (normalizedHeading < 180) { - adjustHeading(TURN_STEP); + adjustHeading(turn_step); } else { - adjustHeading(-TURN_STEP); + adjustHeading(-turn_step); } } @@ -268,9 +266,9 @@ public class ServerYacht { private void turnTowardsHeading(Double newHeading) { Double newVal = heading - newHeading; if (Math.floorMod(newVal.longValue(), 360L) > 180) { - adjustHeading(TURN_STEP / 5); + adjustHeading(turn_step / 5); } else { - adjustHeading(-TURN_STEP / 5); + adjustHeading(-turn_step / 5); } } @@ -422,6 +420,13 @@ public class ServerYacht { } public void setBoatType(String boatType) { + if (boatType == BoatMeshType.DINGHY.toString()) { + turn_step = 5.0; + } else if (boatType == BoatMeshType.CAT_ATE_A_MERINGUE.toString()){ + turn_step = 10.0; + } else { + turn_step = 7.0; + } this.boatType = boatType; } From b05580f018a94b74780e39f4b6e58d31ae4b9d9e Mon Sep 17 00:00:00 2001 From: Kusal Ekanayake Date: Fri, 22 Sep 2017 16:45:10 +1200 Subject: [PATCH 2/8] Worked on making a visual component to the stats. Need to implement acceleration. #story[1274] --- .../java/seng302/gameServer/GameState.java | 3 +- src/main/java/seng302/model/ServerYacht.java | 50 +++++++++++-------- .../dialogs/BoatCustomizeController.java | 39 ++++++++++++++- .../fxObjects/assets_3D/BoatMeshType.java | 14 ++++-- .../fxObjects/assets_3D/BoatModel.java | 7 +++ .../views/dialogs/BoatCustomizeDialog.fxml | 27 ++++++++-- 6 files changed, 108 insertions(+), 32 deletions(-) diff --git a/src/main/java/seng302/gameServer/GameState.java b/src/main/java/seng302/gameServer/GameState.java index 4a93f0d5..cb6d4958 100644 --- a/src/main/java/seng302/gameServer/GameState.java +++ b/src/main/java/seng302/gameServer/GameState.java @@ -449,11 +449,10 @@ public class GameState implements Runnable { private void updateVelocity(ServerYacht yacht) { Double trueWindAngle = Math.abs(windDirection - yacht.getHeading()); Double boatSpeedInKnots = PolarTable.getBoatSpeed(getWindSpeedKnots(), trueWindAngle); - Double maxBoatSpeed = GeoUtility.knotsToMMS(boatSpeedInKnots) * speedMultiplier; + Double maxBoatSpeed = GeoUtility.knotsToMMS(boatSpeedInKnots) * speedMultiplier * yacht.getMaxSpeedMultiplier(); if (yacht.getPowerUp() != null) { if (yacht.getPowerUp().equals(TokenType.BOOST)) { // TODO: 11/09/17 wmu16 CHANGE THIS TO MAGIC NUMBER - // TODO 22/09/17 kre39 change this magic number to a variable maxBoatSpeed *= 2; } } diff --git a/src/main/java/seng302/model/ServerYacht.java b/src/main/java/seng302/model/ServerYacht.java index f9e028d4..6c3ca3dd 100644 --- a/src/main/java/seng302/model/ServerYacht.java +++ b/src/main/java/seng302/model/ServerYacht.java @@ -23,7 +23,8 @@ public class ServerYacht { //Boat info private String boatType; - private Double turn_step; + private Double turnStep = 10.0; + private Double maxSpeedMultiplier = 1.0; private Integer sourceId; private String hullID; //matches HullNum in the XML spec. private String shortName; @@ -172,7 +173,7 @@ public class ServerYacht { if (isAuto) { turnTowardsHeading(autoHeading); if (Math.abs(heading - autoHeading) - <= turn_step) { //Cancel when within 1 turn step of target. + <= turnStep) { //Cancel when within 1 turn step of target. isAuto = false; } } @@ -187,20 +188,20 @@ public class ServerYacht { Double normalizedHeading = normalizeHeading(); if (normalizedHeading == 0) { if (lastHeading < 180) { - adjustHeading(-turn_step); + adjustHeading(-turnStep); } else { - adjustHeading(turn_step); + adjustHeading(turnStep); } } else if (normalizedHeading == 180) { if (lastHeading < 180) { - adjustHeading(turn_step); + adjustHeading(turnStep); } else { - adjustHeading(-turn_step); + adjustHeading(-turnStep); } } else if (normalizedHeading < 180) { - adjustHeading(-turn_step); + adjustHeading(-turnStep); } else { - adjustHeading(turn_step); + adjustHeading(turnStep); } } @@ -209,20 +210,20 @@ public class ServerYacht { Double normalizedHeading = normalizeHeading(); if (normalizedHeading == 0) { if (lastHeading < 180) { - adjustHeading(turn_step); + adjustHeading(turnStep); } else { - adjustHeading(-turn_step); + adjustHeading(-turnStep); } } else if (normalizedHeading == 180) { if (lastHeading < 180) { - adjustHeading(-turn_step); + adjustHeading(-turnStep); } else { - adjustHeading(turn_step); + adjustHeading(turnStep); } } else if (normalizedHeading < 180) { - adjustHeading(turn_step); + adjustHeading(turnStep); } else { - adjustHeading(-turn_step); + adjustHeading(-turnStep); } } @@ -266,9 +267,9 @@ public class ServerYacht { private void turnTowardsHeading(Double newHeading) { Double newVal = heading - newHeading; if (Math.floorMod(newVal.longValue(), 360L) > 180) { - adjustHeading(turn_step / 5); + adjustHeading(turnStep / 5); } else { - adjustHeading(-turn_step / 5); + adjustHeading(-turnStep / 5); } } @@ -420,16 +421,21 @@ public class ServerYacht { } public void setBoatType(String boatType) { - if (boatType == BoatMeshType.DINGHY.toString()) { - turn_step = 5.0; - } else if (boatType == BoatMeshType.CAT_ATE_A_MERINGUE.toString()){ - turn_step = 10.0; - } else { - turn_step = 7.0; + BoatMeshType boatMeshType; + for (BoatMeshType boatMesh: BoatMeshType.values()) { + if (boatType == boatMesh.toString()) { + boatMeshType = boatMesh; + turnStep = boatMeshType.turnStep; + maxSpeedMultiplier = boatMeshType.maxSpeedMultiplier; + } } this.boatType = boatType; } + public Double getMaxSpeedMultiplier() { + return maxSpeedMultiplier; + } + public String getBoatType() { return boatType; } diff --git a/src/main/java/seng302/visualiser/controllers/dialogs/BoatCustomizeController.java b/src/main/java/seng302/visualiser/controllers/dialogs/BoatCustomizeController.java index 55f0b7e6..83b1e520 100644 --- a/src/main/java/seng302/visualiser/controllers/dialogs/BoatCustomizeController.java +++ b/src/main/java/seng302/visualiser/controllers/dialogs/BoatCustomizeController.java @@ -12,6 +12,7 @@ import javafx.fxml.Initializable; import javafx.geometry.Insets; import javafx.scene.Group; import javafx.scene.PointLight; +import javafx.scene.control.ProgressBar; import javafx.scene.layout.Background; import javafx.scene.layout.BackgroundFill; import javafx.scene.layout.CornerRadii; @@ -34,6 +35,12 @@ public class BoatCustomizeController implements Initializable{ @FXML private JFXColorPicker colorPicker; @FXML + private ProgressBar speedBar; + @FXML + private ProgressBar accelBar; + @FXML + private ProgressBar handleBar; + @FXML private JFXButton submitBtn; @FXML private JFXTextField boatName; @@ -49,12 +56,15 @@ public class BoatCustomizeController implements Initializable{ private ClientToServerThread socketThread; private LobbyController lobbyController; private BoatMeshType currentBoat; + private static Double maxSpeedMultiplier = 1.0; + private static Double maxTurnRate = 10.0; + private static Double maxAcceleration = 2.0; @Override public void initialize(URL location, ResourceBundle resources) { socketThread = ViewManager.getInstance().getGameClient().getServerThread(); - + generateMaxStats(); RequiredFieldValidator playerNameReqValidator = new RequiredFieldValidator(); playerNameReqValidator.setMessage("Player name required."); @@ -120,6 +130,8 @@ public class BoatCustomizeController implements Initializable{ BoatModel bo = ModelFactory.boatCustomiseView(currentBoat, colorPicker.getValue()); group.getChildren().add(bo.getAssets()); group.getChildren().add(new PointLight()); + refreshStatBars(bo); + } public void nextBoat(ActionEvent actionEvent) { @@ -130,6 +142,8 @@ public class BoatCustomizeController implements Initializable{ BoatModel bo = ModelFactory.boatCustomiseView(currentBoat, colorPicker.getValue()); group.getChildren().add(bo.getAssets()); group.getChildren().add(new PointLight()); + refreshStatBars(bo); + } public void prevBoat(ActionEvent actionEvent) { @@ -140,6 +154,8 @@ public class BoatCustomizeController implements Initializable{ BoatModel bo = ModelFactory.boatCustomiseView(currentBoat, colorPicker.getValue()); group.getChildren().add(bo.getAssets()); group.getChildren().add(new PointLight()); + refreshStatBars(bo); + } private void RefreshBoat() { @@ -148,5 +164,26 @@ public class BoatCustomizeController implements Initializable{ boatPane.getChildren().add(group); BoatModel bo = ModelFactory.boatCustomiseView(currentBoat, colorPicker.getValue()); group.getChildren().add(bo.getAssets()); + refreshStatBars(bo); + } + + private void generateMaxStats() { + for (BoatMeshType bmt: BoatMeshType.values()) { + if (bmt.turnStep > maxTurnRate) { + maxTurnRate = bmt.turnStep; + } + if (bmt.maxSpeedMultiplier > maxSpeedMultiplier) { + maxSpeedMultiplier = bmt.maxSpeedMultiplier; + } + if (bmt.accelerationMultiplier > maxAcceleration) { + maxAcceleration = bmt.accelerationMultiplier; + } + } + } + + private void refreshStatBars(BoatModel bo) { + speedBar.setProgress((bo.getMeshType().maxSpeedMultiplier) / maxSpeedMultiplier); + accelBar.setProgress(bo.getMeshType().accelerationMultiplier / maxAcceleration); + handleBar.setProgress(bo.getMeshType().turnStep / maxTurnRate); } } diff --git a/src/main/java/seng302/visualiser/fxObjects/assets_3D/BoatMeshType.java b/src/main/java/seng302/visualiser/fxObjects/assets_3D/BoatMeshType.java index 947a63f5..e7c375e5 100644 --- a/src/main/java/seng302/visualiser/fxObjects/assets_3D/BoatMeshType.java +++ b/src/main/java/seng302/visualiser/fxObjects/assets_3D/BoatMeshType.java @@ -7,19 +7,22 @@ package seng302.visualiser.fxObjects.assets_3D; */ public enum BoatMeshType { - DINGHY("dinghy_hull.stl", "dinghy_mast.stl", 1.36653, "dinghy_sail.stl", 1.36653, null, false), + DINGHY("dinghy_hull.stl", "dinghy_mast.stl", 1.36653, "dinghy_sail.stl", 1.36653, null, false, 1.5, 1.0, 5.0), CAT_ATE_A_MERINGUE("catamaran_hull.stl", "catamaran_mast.stl", 0.997, "catamaran_sail.stl", - 0.997, null, false), + 0.997, null, false, 1.0, 1.0, 10.0), PIRATE_SHIP("pirateship_hull.stl", "pirateship_mast.stl", -0.5415, "pirateship_mainsail.stl", - -0.5415, "pirateship_frontsail.stl", true); + -0.5415, "pirateship_frontsail.stl", true, 1.2, 1.0, 7.0); final String hullFile, mastFile, sailFile, jibFile; final double mastOffset, sailOffset; + public final double maxSpeedMultiplier; + public final double accelerationMultiplier; + public final double turnStep; final boolean fixedSail; final static BoatMeshType[] boatTypes = new BoatMeshType[]{DINGHY, CAT_ATE_A_MERINGUE, PIRATE_SHIP}; BoatMeshType(String hullFile, String mastFile, double mastOffset, String sailFile, - double sailOffset, String jibFile, boolean fixedSail) { + double sailOffset, String jibFile, boolean fixedSail, double maxSpeedMultiplier, double accelerationMultiplier, double turnStep) { this.hullFile = hullFile; this.mastFile = mastFile; this.mastOffset = mastOffset; @@ -27,6 +30,9 @@ public enum BoatMeshType { this.sailOffset = sailOffset; this.jibFile = jibFile; this.fixedSail = fixedSail; + this.maxSpeedMultiplier = maxSpeedMultiplier; + this.accelerationMultiplier = accelerationMultiplier; + this.turnStep = turnStep; } public static BoatMeshType getBoatMeshType(String boatType) { diff --git a/src/main/java/seng302/visualiser/fxObjects/assets_3D/BoatModel.java b/src/main/java/seng302/visualiser/fxObjects/assets_3D/BoatModel.java index 0562d4f7..960ceacf 100644 --- a/src/main/java/seng302/visualiser/fxObjects/assets_3D/BoatModel.java +++ b/src/main/java/seng302/visualiser/fxObjects/assets_3D/BoatModel.java @@ -18,6 +18,9 @@ public class BoatModel extends Model { private static final int SAIL_INDEX = 2; private BoatMeshType meshType; + private Double maxSpeedMultiplier; + private Double turnStep; + private Double accelerationMultiplier; /** * Stores a model and it's optional animation. @@ -71,4 +74,8 @@ public class BoatModel extends Model { private MeshView getMeshViewChild(int index) { return (MeshView) assets.getChildren().get(index); } + + public BoatMeshType getMeshType() { + return meshType; + } } \ No newline at end of file diff --git a/src/main/resources/views/dialogs/BoatCustomizeDialog.fxml b/src/main/resources/views/dialogs/BoatCustomizeDialog.fxml index 1d355a33..809b96a2 100644 --- a/src/main/resources/views/dialogs/BoatCustomizeDialog.fxml +++ b/src/main/resources/views/dialogs/BoatCustomizeDialog.fxml @@ -1,5 +1,6 @@ + @@ -24,6 +25,7 @@ + @@ -31,12 +33,12 @@ + + + + + + + + + + + + + + + + + + + From 9f64b2380d4236d948aef9952f1e308b51b2fe0e Mon Sep 17 00:00:00 2001 From: Kusal Ekanayake Date: Fri, 22 Sep 2017 17:28:42 +1200 Subject: [PATCH 3/8] Implemented acceleration and full loading bars. #story[1274] --- src/main/java/seng302/gameServer/GameState.java | 10 +++++----- src/main/java/seng302/model/ServerYacht.java | 9 ++++++++- .../controllers/dialogs/BoatCustomizeController.java | 6 +++--- .../visualiser/fxObjects/assets_3D/BoatMeshType.java | 6 +++--- 4 files changed, 19 insertions(+), 12 deletions(-) diff --git a/src/main/java/seng302/gameServer/GameState.java b/src/main/java/seng302/gameServer/GameState.java index cb6d4958..5818eb66 100644 --- a/src/main/java/seng302/gameServer/GameState.java +++ b/src/main/java/seng302/gameServer/GameState.java @@ -461,17 +461,17 @@ public class GameState implements Runnable { // TODO: 15/08/17 remove magic numbers from these equations. if (yacht.getSailIn()) { if (currentVelocity < maxBoatSpeed - 500) { - yacht.changeVelocity(maxBoatSpeed / 100); + yacht.changeVelocity((maxBoatSpeed / 100) * yacht.getAcceleration()); } else if (currentVelocity > maxBoatSpeed + 500) { - yacht.changeVelocity(-currentVelocity / 200); + yacht.changeVelocity((-currentVelocity / 200) * yacht.getAcceleration()); } else { - yacht.setCurrentVelocity(maxBoatSpeed); + yacht.setCurrentVelocity((maxBoatSpeed) * yacht.getAcceleration()); } } else { if (currentVelocity > 3000) { - yacht.changeVelocity(-currentVelocity / 200); + yacht.changeVelocity((-currentVelocity / 200) * yacht.getAcceleration()); } else if (currentVelocity > 100) { - yacht.changeVelocity(-currentVelocity / 50); + yacht.changeVelocity((-currentVelocity / 50) * yacht.getAcceleration()); } else if (currentVelocity <= 100) { yacht.setCurrentVelocity(0d); } diff --git a/src/main/java/seng302/model/ServerYacht.java b/src/main/java/seng302/model/ServerYacht.java index 6c3ca3dd..29f7eecc 100644 --- a/src/main/java/seng302/model/ServerYacht.java +++ b/src/main/java/seng302/model/ServerYacht.java @@ -11,6 +11,7 @@ import seng302.utilities.GeoUtility; import seng302.visualiser.fxObjects.assets_3D.BoatMeshType; import java.util.HashMap; +import java.util.Objects; /** * Yacht class for the racing boat.

Class created to store more variables (eg. boat statuses) @@ -25,6 +26,7 @@ public class ServerYacht { private String boatType; private Double turnStep = 10.0; private Double maxSpeedMultiplier = 1.0; + private Double acceleration = 1.0; private Integer sourceId; private String hullID; //matches HullNum in the XML spec. private String shortName; @@ -423,10 +425,11 @@ public class ServerYacht { public void setBoatType(String boatType) { BoatMeshType boatMeshType; for (BoatMeshType boatMesh: BoatMeshType.values()) { - if (boatType == boatMesh.toString()) { + if (Objects.equals(boatType, boatMesh.toString())) { boatMeshType = boatMesh; turnStep = boatMeshType.turnStep; maxSpeedMultiplier = boatMeshType.maxSpeedMultiplier; + acceleration = boatMeshType.accelerationMultiplier; } } this.boatType = boatType; @@ -436,6 +439,10 @@ public class ServerYacht { return maxSpeedMultiplier; } + public Double getAcceleration(){ + return acceleration; + } + public String getBoatType() { return boatType; } diff --git a/src/main/java/seng302/visualiser/controllers/dialogs/BoatCustomizeController.java b/src/main/java/seng302/visualiser/controllers/dialogs/BoatCustomizeController.java index 83b1e520..3a71422a 100644 --- a/src/main/java/seng302/visualiser/controllers/dialogs/BoatCustomizeController.java +++ b/src/main/java/seng302/visualiser/controllers/dialogs/BoatCustomizeController.java @@ -56,9 +56,9 @@ public class BoatCustomizeController implements Initializable{ private ClientToServerThread socketThread; private LobbyController lobbyController; private BoatMeshType currentBoat; - private static Double maxSpeedMultiplier = 1.0; - private static Double maxTurnRate = 10.0; - private static Double maxAcceleration = 2.0; + private Double maxSpeedMultiplier = 1.0; + private Double maxTurnRate = 10.0; + private Double maxAcceleration = 1.0; @Override public void initialize(URL location, ResourceBundle resources) { diff --git a/src/main/java/seng302/visualiser/fxObjects/assets_3D/BoatMeshType.java b/src/main/java/seng302/visualiser/fxObjects/assets_3D/BoatMeshType.java index e7c375e5..2dc55d30 100644 --- a/src/main/java/seng302/visualiser/fxObjects/assets_3D/BoatMeshType.java +++ b/src/main/java/seng302/visualiser/fxObjects/assets_3D/BoatMeshType.java @@ -7,11 +7,11 @@ package seng302.visualiser.fxObjects.assets_3D; */ public enum BoatMeshType { - DINGHY("dinghy_hull.stl", "dinghy_mast.stl", 1.36653, "dinghy_sail.stl", 1.36653, null, false, 1.5, 1.0, 5.0), + DINGHY("dinghy_hull.stl", "dinghy_mast.stl", 1.36653, "dinghy_sail.stl", 1.36653, null, false, 1.7, 1.0, 5.0), CAT_ATE_A_MERINGUE("catamaran_hull.stl", "catamaran_mast.stl", 0.997, "catamaran_sail.stl", - 0.997, null, false, 1.0, 1.0, 10.0), + 0.997, null, false, 1.0, 1.4, 10.0), PIRATE_SHIP("pirateship_hull.stl", "pirateship_mast.stl", -0.5415, "pirateship_mainsail.stl", - -0.5415, "pirateship_frontsail.stl", true, 1.2, 1.0, 7.0); + -0.5415, "pirateship_frontsail.stl", true, 1.2, 1.6, 6.0); final String hullFile, mastFile, sailFile, jibFile; final double mastOffset, sailOffset; From 52dc7a956d482dc2459b3b8584a9db3a218eb975 Mon Sep 17 00:00:00 2001 From: Kusal Ekanayake Date: Fri, 22 Sep 2017 17:42:32 +1200 Subject: [PATCH 4/8] Turned handling into a multiplier. #story[1274] --- src/main/java/seng302/model/ServerYacht.java | 4 ++-- .../controllers/dialogs/BoatCustomizeController.java | 2 +- .../visualiser/fxObjects/assets_3D/BoatMeshType.java | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/seng302/model/ServerYacht.java b/src/main/java/seng302/model/ServerYacht.java index 29f7eecc..f2965673 100644 --- a/src/main/java/seng302/model/ServerYacht.java +++ b/src/main/java/seng302/model/ServerYacht.java @@ -24,7 +24,7 @@ public class ServerYacht { //Boat info private String boatType; - private Double turnStep = 10.0; + private Double turnStep = 5.0; private Double maxSpeedMultiplier = 1.0; private Double acceleration = 1.0; private Integer sourceId; @@ -427,7 +427,7 @@ public class ServerYacht { for (BoatMeshType boatMesh: BoatMeshType.values()) { if (Objects.equals(boatType, boatMesh.toString())) { boatMeshType = boatMesh; - turnStep = boatMeshType.turnStep; + turnStep = turnStep * boatMeshType.turnStep; maxSpeedMultiplier = boatMeshType.maxSpeedMultiplier; acceleration = boatMeshType.accelerationMultiplier; } diff --git a/src/main/java/seng302/visualiser/controllers/dialogs/BoatCustomizeController.java b/src/main/java/seng302/visualiser/controllers/dialogs/BoatCustomizeController.java index 3a71422a..b587b62d 100644 --- a/src/main/java/seng302/visualiser/controllers/dialogs/BoatCustomizeController.java +++ b/src/main/java/seng302/visualiser/controllers/dialogs/BoatCustomizeController.java @@ -57,7 +57,7 @@ public class BoatCustomizeController implements Initializable{ private LobbyController lobbyController; private BoatMeshType currentBoat; private Double maxSpeedMultiplier = 1.0; - private Double maxTurnRate = 10.0; + private Double maxTurnRate = 1.0; private Double maxAcceleration = 1.0; @Override diff --git a/src/main/java/seng302/visualiser/fxObjects/assets_3D/BoatMeshType.java b/src/main/java/seng302/visualiser/fxObjects/assets_3D/BoatMeshType.java index 2dc55d30..7dc25d38 100644 --- a/src/main/java/seng302/visualiser/fxObjects/assets_3D/BoatMeshType.java +++ b/src/main/java/seng302/visualiser/fxObjects/assets_3D/BoatMeshType.java @@ -7,11 +7,11 @@ package seng302.visualiser.fxObjects.assets_3D; */ public enum BoatMeshType { - DINGHY("dinghy_hull.stl", "dinghy_mast.stl", 1.36653, "dinghy_sail.stl", 1.36653, null, false, 1.7, 1.0, 5.0), + DINGHY("dinghy_hull.stl", "dinghy_mast.stl", 1.36653, "dinghy_sail.stl", 1.36653, null, false, 1.7, 1.0, 1.0), CAT_ATE_A_MERINGUE("catamaran_hull.stl", "catamaran_mast.stl", 0.997, "catamaran_sail.stl", - 0.997, null, false, 1.0, 1.4, 10.0), + 0.997, null, false, 1.0, 1.4, 2.0), PIRATE_SHIP("pirateship_hull.stl", "pirateship_mast.stl", -0.5415, "pirateship_mainsail.stl", - -0.5415, "pirateship_frontsail.stl", true, 1.2, 1.6, 6.0); + -0.5415, "pirateship_frontsail.stl", true, 1.2, 1.6, 1.2); final String hullFile, mastFile, sailFile, jibFile; final double mastOffset, sailOffset; From 364264377a0454bde02de48fdb473f75cf175e76 Mon Sep 17 00:00:00 2001 From: Kusal Ekanayake Date: Sat, 23 Sep 2017 15:04:11 +1200 Subject: [PATCH 5/8] Fixed merge errors and reimplemented handling multiplier #story[1274] --- src/main/java/seng302/gameServer/GameState.java | 10 +++++----- src/main/java/seng302/model/ServerYacht.java | 14 +++++++++----- .../visualiser/controllers/LobbyController.java | 2 +- .../dialogs/BoatCustomizeController.java | 12 ++++++------ src/test/java/steps/ToggleSailSteps.java | 1 + 5 files changed, 22 insertions(+), 17 deletions(-) diff --git a/src/main/java/seng302/gameServer/GameState.java b/src/main/java/seng302/gameServer/GameState.java index 9735b0c0..4efb1d23 100644 --- a/src/main/java/seng302/gameServer/GameState.java +++ b/src/main/java/seng302/gameServer/GameState.java @@ -462,17 +462,17 @@ public class GameState implements Runnable { // TODO: 15/08/17 remove magic numbers from these equations. if (yacht.getSailIn()) { if (currentVelocity < maxBoatSpeed - 500) { - yacht.changeVelocity((maxBoatSpeed / 100) * yacht.getAcceleration()); + yacht.changeVelocity((maxBoatSpeed / 100) * yacht.getAccelerationMultiplier()); } else if (currentVelocity > maxBoatSpeed + 500) { - yacht.changeVelocity((-currentVelocity / 200) * yacht.getAcceleration()); + yacht.changeVelocity((-currentVelocity / 200) * yacht.getAccelerationMultiplier()); } else { - yacht.setCurrentVelocity((maxBoatSpeed) * yacht.getAcceleration()); + yacht.setCurrentVelocity((maxBoatSpeed) * yacht.getAccelerationMultiplier()); } } else { if (currentVelocity > 3000) { - yacht.changeVelocity((-currentVelocity / 200) * yacht.getAcceleration()); + yacht.changeVelocity((-currentVelocity / 200) * yacht.getAccelerationMultiplier()); } else if (currentVelocity > 100) { - yacht.changeVelocity((-currentVelocity / 50) * yacht.getAcceleration()); + yacht.changeVelocity((-currentVelocity / 50) * yacht.getAccelerationMultiplier()); } else if (currentVelocity <= 100) { yacht.setCurrentVelocity(0d); } diff --git a/src/main/java/seng302/model/ServerYacht.java b/src/main/java/seng302/model/ServerYacht.java index 73628e33..37065649 100644 --- a/src/main/java/seng302/model/ServerYacht.java +++ b/src/main/java/seng302/model/ServerYacht.java @@ -29,7 +29,8 @@ public class ServerYacht { private BoatMeshType boatType; private Double turnStep = 5.0; private Double maxSpeedMultiplier = 1.0; - private Double acceleration = 1.0; + private Double turnStepMultiplier = 1.0; + private Double accelerationMultiplier = 1.0; private Integer sourceId; private String hullID; //matches HullNum in the XML spec. private String shortName; @@ -133,7 +134,7 @@ public class ServerYacht { * @param amount the amount by which to adjust the boat heading. */ public void adjustHeading(Double amount) { - Double newVal = heading + amount; + Double newVal = heading + (amount * turnStepMultiplier); lastHeading = heading; heading = (double) Math.floorMod(newVal.longValue(), 360L); } @@ -272,7 +273,7 @@ public class ServerYacht { private void turnTowardsHeading(Double newHeading) { Double newVal = heading - newHeading; if (Math.floorMod(newVal.longValue(), 360L) > 180) { - adjustHeading(turnStep / 5); + adjustHeading(turnStep / 5); } else { adjustHeading(-turnStep / 5); } @@ -426,6 +427,9 @@ public class ServerYacht { } public void setBoatType(BoatMeshType boatType) { + this.accelerationMultiplier = boatType.accelerationMultiplier; + this.maxSpeedMultiplier = boatType.maxSpeedMultiplier; + this.turnStepMultiplier = boatType.turnStep; this.boatType = boatType; } @@ -433,8 +437,8 @@ public class ServerYacht { return maxSpeedMultiplier; } - public Double getAcceleration(){ - return acceleration; + public Double getAccelerationMultiplier(){ + return accelerationMultiplier; } diff --git a/src/main/java/seng302/visualiser/controllers/LobbyController.java b/src/main/java/seng302/visualiser/controllers/LobbyController.java index 67b1dfbd..aa8430b8 100644 --- a/src/main/java/seng302/visualiser/controllers/LobbyController.java +++ b/src/main/java/seng302/visualiser/controllers/LobbyController.java @@ -131,7 +131,7 @@ public class LobbyController implements Initializable { .get(ViewManager.getInstance().getGameClient().getServerThread().getClientId()) .getBoatName()); controller.setCurrentBoat(this.playerBoats.get(ViewManager.getInstance().getGameClient().getServerThread().getClientId()) - .getBoatType()); + .getBoatType().toString()); return customizationDialog; } diff --git a/src/main/java/seng302/visualiser/controllers/dialogs/BoatCustomizeController.java b/src/main/java/seng302/visualiser/controllers/dialogs/BoatCustomizeController.java index 5b0cf70b..321f98dd 100644 --- a/src/main/java/seng302/visualiser/controllers/dialogs/BoatCustomizeController.java +++ b/src/main/java/seng302/visualiser/controllers/dialogs/BoatCustomizeController.java @@ -122,7 +122,7 @@ public class BoatCustomizeController implements Initializable{ } public void setCurrentBoat(String boatType) { - currentBoat = boatType; + currentBoat = BoatMeshType.valueOf(boatType); displayCurrentBoat(); refreshStatBars(currentBoat); } @@ -155,7 +155,7 @@ public class BoatCustomizeController implements Initializable{ boatPane.getChildren().add(group); BoatModel bo = ModelFactory.boatCustomiseView(currentBoat, colorPicker.getValue()); group.getChildren().add(bo.getAssets()); - refreshStatBars(bo); + refreshStatBars(currentBoat); } private void generateMaxStats() { @@ -172,9 +172,9 @@ public class BoatCustomizeController implements Initializable{ } } - private void refreshStatBars(BoatModel bo) { - speedBar.setProgress((bo.getMeshType().maxSpeedMultiplier) / maxSpeedMultiplier); - accelBar.setProgress(bo.getMeshType().accelerationMultiplier / maxAcceleration); - handleBar.setProgress(bo.getMeshType().turnStep / maxTurnRate); + private void refreshStatBars(BoatMeshType bo) { + speedBar.setProgress((bo.maxSpeedMultiplier) / maxSpeedMultiplier); + accelBar.setProgress(bo.accelerationMultiplier / maxAcceleration); + handleBar.setProgress(bo.turnStep / maxTurnRate); } } diff --git a/src/test/java/steps/ToggleSailSteps.java b/src/test/java/steps/ToggleSailSteps.java index 4bf20242..5c82a614 100644 --- a/src/test/java/steps/ToggleSailSteps.java +++ b/src/test/java/steps/ToggleSailSteps.java @@ -13,6 +13,7 @@ import seng302.model.ServerYacht; import seng302.visualiser.ClientToServerThread; /** + * * Created by kre39 on 7/08/17. */ public class ToggleSailSteps { From e9b50038a91c922aa146b5439d199f56721698b3 Mon Sep 17 00:00:00 2001 From: Kusal Ekanayake Date: Sat, 23 Sep 2017 15:09:22 +1200 Subject: [PATCH 6/8] Balance changes. Always wanted to use that as a commit message. #story[1274] --- .../visualiser/fxObjects/assets_3D/BoatMeshType.java | 7 +++---- src/test/java/seng302/utilities/BoatMeshTypeTest.java | 4 ++-- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/main/java/seng302/visualiser/fxObjects/assets_3D/BoatMeshType.java b/src/main/java/seng302/visualiser/fxObjects/assets_3D/BoatMeshType.java index 185503fb..292c636a 100644 --- a/src/main/java/seng302/visualiser/fxObjects/assets_3D/BoatMeshType.java +++ b/src/main/java/seng302/visualiser/fxObjects/assets_3D/BoatMeshType.java @@ -7,8 +7,8 @@ package seng302.visualiser.fxObjects.assets_3D; */ public enum BoatMeshType { - DINGHY("dinghy_hull.stl", "dinghy_mast.stl", 1.36653, "dinghy_sail.stl", 1.36653, null, false, 1.7, 1.0, 1.0), - CAT_ATE_A_MERINGUE("catamaran_hull.stl", "catamaran_mast.stl", 0.997, "catamaran_sail.stl", + DINGHY("dinghy_hull.stl", "dinghy_mast.stl", 1.36653, "dinghy_sail.stl", 1.36653, null, false, 1.8, 1.0, 1.0), + CATAMARAN("catamaran_hull.stl", "catamaran_mast.stl", 0.997, "catamaran_sail.stl", 0.997, null, false, 1.0, 1.4, 2.0), PIRATE_SHIP("pirateship_hull.stl", "pirateship_mast.stl", -0.5415, "pirateship_mainsail.stl", -0.5415, "pirateship_frontsail.stl", true, 1.2, 1.6, 1.2); @@ -19,7 +19,7 @@ public enum BoatMeshType { public final double accelerationMultiplier; public final double turnStep; final boolean fixedSail; - final static BoatMeshType[] boatTypes = new BoatMeshType[]{DINGHY, CAT_ATE_A_MERINGUE, PIRATE_SHIP}; + final static BoatMeshType[] boatTypes = new BoatMeshType[]{DINGHY, CATAMARAN, PIRATE_SHIP}; BoatMeshType(String hullFile, String mastFile, double mastOffset, String sailFile, double sailOffset, String jibFile, boolean fixedSail, double maxSpeedMultiplier, double accelerationMultiplier, double turnStep) { @@ -36,7 +36,6 @@ public enum BoatMeshType { } - //TODO kre39 make something not terrible to cycle through boat types public static BoatMeshType getNextBoatType(BoatMeshType boatType) { for (int i = 0; i < boatTypes.length; i++) { if (i == boatTypes.length -1) { diff --git a/src/test/java/seng302/utilities/BoatMeshTypeTest.java b/src/test/java/seng302/utilities/BoatMeshTypeTest.java index 743c7f1e..8f0d30b9 100644 --- a/src/test/java/seng302/utilities/BoatMeshTypeTest.java +++ b/src/test/java/seng302/utilities/BoatMeshTypeTest.java @@ -15,12 +15,12 @@ public class BoatMeshTypeTest { public void testNextBoatMeshType() { BoatMeshType currentBoat = BoatMeshType.DINGHY; BoatMeshType nextBoat = BoatMeshType.getNextBoatType(currentBoat); - Assert.assertEquals(BoatMeshType.CAT_ATE_A_MERINGUE, nextBoat); + Assert.assertEquals(BoatMeshType.CATAMARAN, nextBoat); } @Test public void testPreviousBoatMeshType() { - BoatMeshType currentBoat = BoatMeshType.CAT_ATE_A_MERINGUE; + BoatMeshType currentBoat = BoatMeshType.CATAMARAN; BoatMeshType prevBoat = BoatMeshType.getPrevBoatType(currentBoat); Assert.assertEquals(BoatMeshType.DINGHY, prevBoat); } From 0a885dd8fd339e80332f396952cb480260b48a49 Mon Sep 17 00:00:00 2001 From: Kusal Ekanayake Date: Sat, 23 Sep 2017 15:37:16 +1200 Subject: [PATCH 7/8] Clean up changes #story[1274] --- .../dialogs/BoatCustomizeController.java | 20 +++++++++---------- .../fxObjects/assets_3D/BoatModel.java | 3 --- 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/src/main/java/seng302/visualiser/controllers/dialogs/BoatCustomizeController.java b/src/main/java/seng302/visualiser/controllers/dialogs/BoatCustomizeController.java index 321f98dd..67fb089a 100644 --- a/src/main/java/seng302/visualiser/controllers/dialogs/BoatCustomizeController.java +++ b/src/main/java/seng302/visualiser/controllers/dialogs/BoatCustomizeController.java @@ -55,14 +55,14 @@ public class BoatCustomizeController implements Initializable{ private LobbyController lobbyController; private BoatMeshType currentBoat; private Double maxSpeedMultiplier = 1.0; - private Double maxTurnRate = 1.0; - private Double maxAcceleration = 1.0; + private Double maxTurnRateMultiplier = 1.0; + private Double maxAccelerationMultiplier = 1.0; @Override public void initialize(URL location, ResourceBundle resources) { socketThread = ViewManager.getInstance().getGameClient().getServerThread(); - generateMaxStats(); + findMaxStats(); RequiredFieldValidator playerNameReqValidator = new RequiredFieldValidator(); playerNameReqValidator.setMessage("Player name required."); @@ -158,23 +158,23 @@ public class BoatCustomizeController implements Initializable{ refreshStatBars(currentBoat); } - private void generateMaxStats() { + private void findMaxStats() { for (BoatMeshType bmt: BoatMeshType.values()) { - if (bmt.turnStep > maxTurnRate) { - maxTurnRate = bmt.turnStep; + if (bmt.turnStep > maxTurnRateMultiplier) { + maxTurnRateMultiplier = bmt.turnStep; } if (bmt.maxSpeedMultiplier > maxSpeedMultiplier) { maxSpeedMultiplier = bmt.maxSpeedMultiplier; } - if (bmt.accelerationMultiplier > maxAcceleration) { - maxAcceleration = bmt.accelerationMultiplier; + if (bmt.accelerationMultiplier > maxAccelerationMultiplier) { + maxAccelerationMultiplier = bmt.accelerationMultiplier; } } } private void refreshStatBars(BoatMeshType bo) { speedBar.setProgress((bo.maxSpeedMultiplier) / maxSpeedMultiplier); - accelBar.setProgress(bo.accelerationMultiplier / maxAcceleration); - handleBar.setProgress(bo.turnStep / maxTurnRate); + accelBar.setProgress(bo.accelerationMultiplier / maxAccelerationMultiplier); + handleBar.setProgress(bo.turnStep / maxTurnRateMultiplier); } } diff --git a/src/main/java/seng302/visualiser/fxObjects/assets_3D/BoatModel.java b/src/main/java/seng302/visualiser/fxObjects/assets_3D/BoatModel.java index 960ceacf..e056b14d 100644 --- a/src/main/java/seng302/visualiser/fxObjects/assets_3D/BoatModel.java +++ b/src/main/java/seng302/visualiser/fxObjects/assets_3D/BoatModel.java @@ -18,9 +18,6 @@ public class BoatModel extends Model { private static final int SAIL_INDEX = 2; private BoatMeshType meshType; - private Double maxSpeedMultiplier; - private Double turnStep; - private Double accelerationMultiplier; /** * Stores a model and it's optional animation. From f6b41f051300af7bade75dd9363decac37beae9f Mon Sep 17 00:00:00 2001 From: Kusal Ekanayake Date: Sun, 24 Sep 2017 18:06:26 +1300 Subject: [PATCH 8/8] Fixes Issue #59 --- src/main/java/seng302/utilities/Sounds.java | 22 ++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/main/java/seng302/utilities/Sounds.java b/src/main/java/seng302/utilities/Sounds.java index 944fa93f..f8257b1f 100644 --- a/src/main/java/seng302/utilities/Sounds.java +++ b/src/main/java/seng302/utilities/Sounds.java @@ -14,8 +14,10 @@ public class Sounds { private static MediaPlayer soundEffect; private static MediaPlayer soundPlayer; private static MediaPlayer hoverSoundPlayer; + private static MediaPlayer crashSoundPlayer; private static boolean hoverInitialized = false; + private static boolean crashInitialized = false; private static boolean musicMuted = false; private static boolean soundEffectsMuted = false; @@ -155,11 +157,17 @@ public class Sounds { public static void playCrashSound() { if (!soundEffectsMuted) { - Media crashSound = new Media( - Sounds.class.getClassLoader().getResource("sounds/Large-metal-door-slam.mp3") - .toString()); - soundPlayer = new MediaPlayer(crashSound); - soundPlayer.play(); + if (!crashInitialized) { + Media pickupSound = new Media( + Sounds.class.getClassLoader().getResource("sounds/Large-metal-door-slam.mp3") + .toString()); + crashSoundPlayer = new MediaPlayer(pickupSound); + crashInitialized = true; + } + if (crashSoundPlayer != null) { + crashSoundPlayer.stop(); + } + crashSoundPlayer.play(); } } @@ -176,10 +184,10 @@ public class Sounds { public static void playHoverSound() { if (!soundEffectsMuted) { if (!hoverInitialized) { - Media crashSound = new Media( + Media hoverSound = new Media( Sounds.class.getClassLoader().getResource("sounds/Error-sound-effect.mp3") .toString()); - hoverSoundPlayer = new MediaPlayer(crashSound); + hoverSoundPlayer = new MediaPlayer(hoverSound); hoverInitialized = true; } hoverSoundPlayer.setVolume(0.5);