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 @@
-
-
+
+
-
+
@@ -75,6 +77,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+