diff --git a/src/main/java/seng302/gameServer/GameState.java b/src/main/java/seng302/gameServer/GameState.java
index 0b495a8e..4efb1d23 100644
--- a/src/main/java/seng302/gameServer/GameState.java
+++ b/src/main/java/seng302/gameServer/GameState.java
@@ -18,6 +18,7 @@ import seng302.utilities.XMLParser;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.util.*;
+import seng302.visualiser.fxObjects.assets_3D.BoatMeshType;
/**
* A Static class to hold information about the current state of the game (model)
@@ -449,7 +450,7 @@ 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
@@ -461,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.changeVelocity((maxBoatSpeed / 100) * yacht.getAccelerationMultiplier());
} else if (currentVelocity > maxBoatSpeed + 500) {
- yacht.changeVelocity(-currentVelocity / 200);
+ yacht.changeVelocity((-currentVelocity / 200) * yacht.getAccelerationMultiplier());
} else {
- yacht.setCurrentVelocity(maxBoatSpeed);
+ yacht.setCurrentVelocity((maxBoatSpeed) * yacht.getAccelerationMultiplier());
}
} else {
if (currentVelocity > 3000) {
- yacht.changeVelocity(-currentVelocity / 200);
+ yacht.changeVelocity((-currentVelocity / 200) * yacht.getAccelerationMultiplier());
} else if (currentVelocity > 100) {
- yacht.changeVelocity(-currentVelocity / 50);
+ yacht.changeVelocity((-currentVelocity / 50) * yacht.getAccelerationMultiplier());
} else if (currentVelocity <= 100) {
yacht.setCurrentVelocity(0d);
}
@@ -702,6 +703,9 @@ public class GameState implements Runnable {
int blue = customizeData[2] & 0xFF;
Color yachtColor = Color.rgb(red, green, blue);
playerYacht.setBoatColor(yachtColor);
+ } else if (requestType.equals(CustomizeRequestType.SHAPE)) {
+ String type = new String(customizeData);
+ playerYacht.setBoatType(BoatMeshType.valueOf(type));
}
}
diff --git a/src/main/java/seng302/gameServer/ServerToClientThread.java b/src/main/java/seng302/gameServer/ServerToClientThread.java
index 1138f53d..eb5a9ad0 100644
--- a/src/main/java/seng302/gameServer/ServerToClientThread.java
+++ b/src/main/java/seng302/gameServer/ServerToClientThread.java
@@ -33,6 +33,7 @@ import seng302.model.stream.packets.PacketType;
import seng302.model.stream.packets.StreamPacket;
import seng302.model.stream.xml.generator.RaceXMLTemplate;
import seng302.utilities.XMLGenerator;
+import seng302.visualiser.fxObjects.assets_3D.BoatMeshType;
/**
* A class describing a single connection to a Client for the purposes of sending and receiving on
@@ -125,7 +126,7 @@ public class ServerToClientThread implements Runnable {
lName = all.get(ThreadLocalRandom.current().nextInt(0, all.size()));
ServerYacht yacht = new ServerYacht(
- "Yacht", sourceId, sourceId.toString(), fName, fName + " " + lName, "NZ"
+ BoatMeshType.DINGHY, sourceId, sourceId.toString(), fName, fName + " " + lName, "NZ"
);
player = new Player(socket, yacht);
diff --git a/src/main/java/seng302/model/ClientYacht.java b/src/main/java/seng302/model/ClientYacht.java
index f2fcec96..ea3058ce 100644
--- a/src/main/java/seng302/model/ClientYacht.java
+++ b/src/main/java/seng302/model/ClientYacht.java
@@ -16,6 +16,7 @@ import javafx.scene.paint.Color;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import seng302.visualiser.fxObjects.assets_3D.BoatObject;
+import seng302.visualiser.fxObjects.assets_3D.BoatMeshType;
/**
* Yacht class for the racing boat.
Class created to store more variables (eg. boat statuses)
@@ -38,7 +39,7 @@ public class ClientYacht extends Observable {
private Logger logger = LoggerFactory.getLogger(ClientYacht.class);
- private String boatType;
+ private BoatMeshType boatType;
private Integer sourceId;
private String hullID; //matches HullNum in the XML spec.
private String shortName;
@@ -47,7 +48,7 @@ public class ClientYacht extends Observable {
private Integer position;
private Long estimateTimeAtFinish;
- private Boolean sailIn = false;
+ private Boolean sailIn = true;
private Integer currentMarkSeqID = 0;
private Long markRoundTime;
private Long timeTillNext;
@@ -68,7 +69,7 @@ public class ClientYacht extends Observable {
private ReadOnlyDoubleWrapper headingProperty = new ReadOnlyDoubleWrapper();
private Color colour;
- public ClientYacht(String boatType, Integer sourceId, String hullID, String shortName,
+ public ClientYacht(BoatMeshType boatType, Integer sourceId, String hullID, String shortName,
String boatName, String country) {
this.boatType = boatType;
this.sourceId = sourceId;
@@ -92,7 +93,7 @@ public class ClientYacht extends Observable {
super.addObserver(o);
}
- public String getBoatType() {
+ public BoatMeshType getBoatType() {
return boatType;
}
diff --git a/src/main/java/seng302/model/ServerYacht.java b/src/main/java/seng302/model/ServerYacht.java
index f2d54538..37065649 100644
--- a/src/main/java/seng302/model/ServerYacht.java
+++ b/src/main/java/seng302/model/ServerYacht.java
@@ -8,10 +8,13 @@ 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.Objects;
import java.util.Observable;
import java.util.Observer;
+import seng302.visualiser.fxObjects.assets_3D.BoatMeshType;
/**
* Yacht class for the racing boat.
Class created to store more variables (eg. boat statuses)
@@ -20,12 +23,14 @@ import java.util.Observer;
*/
public class ServerYacht {
- private Logger logger = LoggerFactory.getLogger(ClientYacht.class);
-
- public static final Double TURN_STEP = 5.0;
+ private Logger logger = LoggerFactory.getLogger(ServerYacht.class);
//Boat info
- private String boatType;
+ private BoatMeshType boatType;
+ private Double turnStep = 5.0;
+ private Double maxSpeedMultiplier = 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;
@@ -57,9 +62,9 @@ public class ServerYacht {
private Long powerUpStartTime;
- public ServerYacht(String boatType, Integer sourceId, String hullID, String shortName,
+ public ServerYacht(BoatMeshType 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;
@@ -129,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);
}
@@ -174,7 +179,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;
}
}
@@ -189,20 +194,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);
}
}
@@ -211,20 +216,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);
}
}
@@ -268,9 +273,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);
}
}
@@ -421,4 +426,23 @@ public class ServerYacht {
return boatColor;
}
+ public void setBoatType(BoatMeshType boatType) {
+ this.accelerationMultiplier = boatType.accelerationMultiplier;
+ this.maxSpeedMultiplier = boatType.maxSpeedMultiplier;
+ this.turnStepMultiplier = boatType.turnStep;
+ this.boatType = boatType;
+ }
+
+ public Double getMaxSpeedMultiplier() {
+ return maxSpeedMultiplier;
+ }
+
+ public Double getAccelerationMultiplier(){
+ return accelerationMultiplier;
+ }
+
+
+ public BoatMeshType getBoatType() {
+ return boatType;
+ }
}
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);
diff --git a/src/main/java/seng302/utilities/XMLParser.java b/src/main/java/seng302/utilities/XMLParser.java
index a903daaf..71da1248 100644
--- a/src/main/java/seng302/utilities/XMLParser.java
+++ b/src/main/java/seng302/utilities/XMLParser.java
@@ -18,6 +18,7 @@ import seng302.model.stream.xml.parser.RaceXMLData;
import seng302.model.stream.xml.parser.RegattaXMLData;
import seng302.model.token.Token;
import seng302.model.token.TokenType;
+import seng302.visualiser.fxObjects.assets_3D.BoatMeshType;
/**
* Utilities for parsing XML documents
@@ -139,16 +140,14 @@ public class XMLParser {
if (currentBoat.getNodeName().equals("Boat")) {
// Boat boat = new Boat(currentBoat);
ClientYacht yacht = new ClientYacht(
- XMLParser.getNodeAttributeString(currentBoat, "Type"),
+ BoatMeshType.valueOf(XMLParser.getNodeAttributeString(currentBoat, "Type")),
XMLParser.getNodeAttributeInt(currentBoat, "SourceID"),
XMLParser.getNodeAttributeString(currentBoat, "HullNum"),
XMLParser.getNodeAttributeString(currentBoat, "ShortName"),
XMLParser.getNodeAttributeString(currentBoat, "BoatName"),
XMLParser.getNodeAttributeString(currentBoat, "Country"));
yacht.setColour(Color.web(getNodeAttributeString(currentBoat, "Color")));
- if (yacht.getBoatType().equals("Yacht")) {
- competingBoats.put(yacht.getSourceId(), yacht);
- }
+ competingBoats.put(yacht.getSourceId(), yacht);
}
}
return competingBoats;
diff --git a/src/main/java/seng302/visualiser/GameView3D.java b/src/main/java/seng302/visualiser/GameView3D.java
index 7c3fff69..db4a2758 100644
--- a/src/main/java/seng302/visualiser/GameView3D.java
+++ b/src/main/java/seng302/visualiser/GameView3D.java
@@ -35,6 +35,7 @@ import seng302.visualiser.cameras.RaceCamera;
import seng302.visualiser.cameras.TopDownCamera;
import seng302.visualiser.controllers.ViewManager;
import seng302.visualiser.fxObjects.MarkArrowFactory;
+import seng302.visualiser.fxObjects.assets_3D.BoatMeshType;
import seng302.visualiser.fxObjects.assets_3D.BoatObject;
import seng302.visualiser.fxObjects.assets_3D.Marker3D;
import seng302.visualiser.fxObjects.assets_3D.ModelFactory;
@@ -485,7 +486,7 @@ public class GameView3D {
final List wakes = new ArrayList<>();
for (ClientYacht clientYacht : yachts) {
Color colour = clientYacht.getColour();
- newBoat = new BoatObject();
+ newBoat = new BoatObject(clientYacht.getBoatType());
newBoat.setFill(colour);
boatObjects.put(clientYacht, newBoat);
wakesGroup.getChildren().add(newBoat.getWake());
@@ -600,6 +601,7 @@ public class GameView3D {
}
public void setBoatAsPlayer (ClientYacht playerYacht) {
+ playerYacht.toggleSail();
playerBoatAnimationTimer = new AnimationTimer() {
double count = 60;
diff --git a/src/main/java/seng302/visualiser/controllers/LobbyController.java b/src/main/java/seng302/visualiser/controllers/LobbyController.java
index bbb39f75..aa8430b8 100644
--- a/src/main/java/seng302/visualiser/controllers/LobbyController.java
+++ b/src/main/java/seng302/visualiser/controllers/LobbyController.java
@@ -33,6 +33,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.ResourceBundle;
+import seng302.visualiser.fxObjects.assets_3D.BoatMeshType;
public class LobbyController implements Initializable {
@@ -129,6 +130,8 @@ public class LobbyController implements Initializable {
controller.setPlayerName(this.playerBoats
.get(ViewManager.getInstance().getGameClient().getServerThread().getClientId())
.getBoatName());
+ controller.setCurrentBoat(this.playerBoats.get(ViewManager.getInstance().getGameClient().getServerThread().getClientId())
+ .getBoatType().toString());
return customizationDialog;
}
@@ -202,7 +205,7 @@ public class LobbyController implements Initializable {
FXMLLoader loader = new FXMLLoader(
getClass().getResource("/views/cells/PlayerCell.fxml"));
- loader.setController(new PlayerCell(playerId, yacht.getBoatName(), yacht.getColour()));
+ loader.setController(new PlayerCell(playerId, yacht));
try {
pane = loader.load();
diff --git a/src/main/java/seng302/visualiser/controllers/ViewManager.java b/src/main/java/seng302/visualiser/controllers/ViewManager.java
index 165d0c39..8e966813 100644
--- a/src/main/java/seng302/visualiser/controllers/ViewManager.java
+++ b/src/main/java/seng302/visualiser/controllers/ViewManager.java
@@ -278,6 +278,8 @@ public class ViewManager {
stage.setMinHeight(500);
stage.setMinWidth(800);
+ stage.setTitle("Party Parrots At Sea");
+ stage.getIcons().add(new Image(getClass().getResourceAsStream("/PP.png")));
stage.setOnCloseRequest(e -> closeAll());
stage.setScene(scene);
stage.show();
diff --git a/src/main/java/seng302/visualiser/controllers/cells/PlayerCell.java b/src/main/java/seng302/visualiser/controllers/cells/PlayerCell.java
index 6fb35708..21bd6644 100644
--- a/src/main/java/seng302/visualiser/controllers/cells/PlayerCell.java
+++ b/src/main/java/seng302/visualiser/controllers/cells/PlayerCell.java
@@ -6,6 +6,7 @@ import javafx.scene.control.Label;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
+import seng302.model.ClientYacht;
import seng302.visualiser.fxObjects.assets_3D.BoatMeshType;
import seng302.visualiser.fxObjects.assets_3D.BoatModel;
import seng302.visualiser.fxObjects.assets_3D.ModelFactory;
@@ -24,11 +25,13 @@ public class PlayerCell {
private String name;
private Color boatColor;
private Integer playerId;
+ private BoatMeshType boatType;
- public PlayerCell(Integer playerId, String playerName, Color color) {
+ public PlayerCell(Integer playerId, ClientYacht yacht) {
this.playerId = playerId;
- this.name = playerName;
- this.boatColor = color;
+ this.name = yacht.getBoatName();
+ this.boatColor = yacht.getColour();
+ this.boatType = yacht.getBoatType();
}
public void initialize() {
@@ -37,7 +40,7 @@ public class PlayerCell {
// Add Rotating Boat to Player Cell with players color on it.
Group group = new Group();
boatPane.getChildren().add(group);
- BoatModel bo = ModelFactory.boatIconView(BoatMeshType.DINGHY, this.boatColor);
+ BoatModel bo = ModelFactory.boatIconView(boatType, boatColor);
group.getChildren().add(bo.getAssets());
}
diff --git a/src/main/java/seng302/visualiser/controllers/dialogs/BoatCustomizeController.java b/src/main/java/seng302/visualiser/controllers/dialogs/BoatCustomizeController.java
index 339f08b8..67fb089a 100644
--- a/src/main/java/seng302/visualiser/controllers/dialogs/BoatCustomizeController.java
+++ b/src/main/java/seng302/visualiser/controllers/dialogs/BoatCustomizeController.java
@@ -6,15 +6,25 @@ import com.jfoenix.controls.JFXTextField;
import com.jfoenix.validation.RequiredFieldValidator;
import java.net.URL;
import java.util.ResourceBundle;
-import javafx.event.ActionEvent;
import javafx.fxml.FXML;
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;
+import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import seng302.gameServer.messages.CustomizeRequestType;
import seng302.utilities.Sounds;
import seng302.visualiser.ClientToServerThread;
import seng302.visualiser.controllers.LobbyController;
import seng302.visualiser.controllers.ViewManager;
+import seng302.visualiser.fxObjects.assets_3D.BoatMeshType;
+import seng302.visualiser.fxObjects.assets_3D.BoatModel;
+import seng302.visualiser.fxObjects.assets_3D.ModelFactory;
import seng302.visualiser.validators.FieldLengthValidator;
import seng302.visualiser.validators.ValidationTools;
@@ -24,23 +34,35 @@ 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;
@FXML
- void colorChanged(ActionEvent event) {
- Color color = colorPicker.getValue();
+ private Pane boatPane;
+ @FXML
+ void colorChanged() {
+ refreshBoat();
}
//---------FXML END---------//
private ClientToServerThread socketThread;
private LobbyController lobbyController;
+ private BoatMeshType currentBoat;
+ private Double maxSpeedMultiplier = 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();
-
+ findMaxStats();
RequiredFieldValidator playerNameReqValidator = new RequiredFieldValidator();
playerNameReqValidator.setMessage("Player name required.");
@@ -48,6 +70,8 @@ public class BoatCustomizeController implements Initializable{
playerNameLengthValidator.setMessage("Player name too long.");
boatName.setValidators(playerNameLengthValidator, playerNameReqValidator);
+ boatPane.setBackground(
+ new Background(new BackgroundFill(Color.SKYBLUE, CornerRadii.EMPTY, Insets.EMPTY)));
submitBtn.setOnMouseReleased(event -> {
Sounds.playButtonClick();
@@ -78,7 +102,10 @@ public class BoatCustomizeController implements Initializable{
colorArray[2] = (byte) blue;
socketThread.sendCustomizationRequest(CustomizeRequestType.COLOR, colorArray);
+ socketThread.sendCustomizationRequest(CustomizeRequestType.SHAPE, currentBoat.toString().getBytes());
lobbyController.closeCustomizationDialog();
+
+
}
}
@@ -93,4 +120,61 @@ public class BoatCustomizeController implements Initializable{
public void setParentController(LobbyController lobbyController){
this.lobbyController = lobbyController;
}
+
+ public void setCurrentBoat(String boatType) {
+ currentBoat = BoatMeshType.valueOf(boatType);
+ displayCurrentBoat();
+ refreshStatBars(currentBoat);
+ }
+
+ public void nextBoat() {
+ currentBoat = BoatMeshType.getNextBoatType(currentBoat);
+ displayCurrentBoat();
+ refreshStatBars(currentBoat);
+ }
+
+ public void prevBoat() {
+ currentBoat = BoatMeshType.getPrevBoatType(currentBoat);
+ displayCurrentBoat();
+ refreshStatBars(currentBoat);
+
+ }
+
+ private void displayCurrentBoat() {
+ boatPane.getChildren().clear();
+ Group group = new Group();
+ boatPane.getChildren().add(group);
+ BoatModel bo = ModelFactory.boatCustomiseView(currentBoat, colorPicker.getValue());
+ group.getChildren().add(bo.getAssets());
+ group.getChildren().add(new PointLight());
+ }
+
+ private void refreshBoat() {
+ boatPane.getChildren().clear();
+ Group group = new Group();
+ boatPane.getChildren().add(group);
+ BoatModel bo = ModelFactory.boatCustomiseView(currentBoat, colorPicker.getValue());
+ group.getChildren().add(bo.getAssets());
+ refreshStatBars(currentBoat);
+ }
+
+ private void findMaxStats() {
+ for (BoatMeshType bmt: BoatMeshType.values()) {
+ if (bmt.turnStep > maxTurnRateMultiplier) {
+ maxTurnRateMultiplier = bmt.turnStep;
+ }
+ if (bmt.maxSpeedMultiplier > maxSpeedMultiplier) {
+ maxSpeedMultiplier = bmt.maxSpeedMultiplier;
+ }
+ if (bmt.accelerationMultiplier > maxAccelerationMultiplier) {
+ maxAccelerationMultiplier = bmt.accelerationMultiplier;
+ }
+ }
+ }
+
+ private void refreshStatBars(BoatMeshType bo) {
+ speedBar.setProgress((bo.maxSpeedMultiplier) / maxSpeedMultiplier);
+ accelBar.setProgress(bo.accelerationMultiplier / maxAccelerationMultiplier);
+ handleBar.setProgress(bo.turnStep / maxTurnRateMultiplier);
+ }
}
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 9b74aa69..292c636a 100644
--- a/src/main/java/seng302/visualiser/fxObjects/assets_3D/BoatMeshType.java
+++ b/src/main/java/seng302/visualiser/fxObjects/assets_3D/BoatMeshType.java
@@ -2,21 +2,59 @@ package seng302.visualiser.fxObjects.assets_3D;
/**
* Enum for boat meshes. Enum values should be of the form :
- * ENUM_VALUE (hull file, mast file, Y offset of mast CoR from origin, sail file, Y offset of sail CoR from origin)
+ * ENUM_VALUE (hull file, mast file, Y offset of mast CoR from origin, sail file, Y offset of sail CoR from origin, jib file, fixed sail)
* Files must be valid .stl files.
*/
public enum BoatMeshType {
- DINGHY ("dinghy_hull.stl", "dinghy_mast.stl", -1.36653, "dinghy_sail.stl", -1.36653);
+ 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);
- final String hullFile, mastFile, sailFile;
+ 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, CATAMARAN, PIRATE_SHIP};
- BoatMeshType(String hullFile, String mastFile, double mastOffset, String sailFile, double sailOffset) {
+ BoatMeshType(String hullFile, String mastFile, double mastOffset, String sailFile,
+ double sailOffset, String jibFile, boolean fixedSail, double maxSpeedMultiplier, double accelerationMultiplier, double turnStep) {
this.hullFile = hullFile;
this.mastFile = mastFile;
this.mastOffset = mastOffset;
this.sailFile = sailFile;
this.sailOffset = sailOffset;
+ this.jibFile = jibFile;
+ this.fixedSail = fixedSail;
+ this.maxSpeedMultiplier = maxSpeedMultiplier;
+ this.accelerationMultiplier = accelerationMultiplier;
+ this.turnStep = turnStep;
+ }
+
+
+ public static BoatMeshType getNextBoatType(BoatMeshType boatType) {
+ for (int i = 0; i < boatTypes.length; i++) {
+ if (i == boatTypes.length -1) {
+ return boatTypes[0];
+ } else if (boatType == boatTypes[i]) {
+ return boatTypes[i+1];
+ }
+ }
+ return boatType;
+ }
+
+ public static BoatMeshType getPrevBoatType(BoatMeshType boatType) {
+ for (int i = 0; i < boatTypes.length; i++) {
+ if (i == 0 && boatType == boatTypes[i]) {
+ return boatTypes[boatTypes.length -1];
+ } else if (boatType == boatTypes[i]) {
+ return boatTypes[i-1];
+ }
+ }
+ return 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 b1373c67..e056b14d 100644
--- a/src/main/java/seng302/visualiser/fxObjects/assets_3D/BoatModel.java
+++ b/src/main/java/seng302/visualiser/fxObjects/assets_3D/BoatModel.java
@@ -34,14 +34,16 @@ public class BoatModel extends Model {
* @param degrees The rotation of the sail in degrees
*/
public void rotateSail(double degrees) {
- MeshView mast = getMeshViewChild(MAST_INDEX);
- MeshView sail = getMeshViewChild(SAIL_INDEX);
- mast.getTransforms().setAll(
- new Rotate(degrees, -meshType.mastOffset, 0,0, new Point3D(0, 0, 1))
- );
- sail.getTransforms().setAll(
- new Rotate(degrees, -meshType.sailOffset, 0,0, new Point3D(0, 0, 1))
- );
+ if (!meshType.fixedSail) {
+ MeshView mast = getMeshViewChild(MAST_INDEX);
+ MeshView sail = getMeshViewChild(SAIL_INDEX);
+ mast.getTransforms().setAll(
+ new Rotate(degrees, 0, -meshType.mastOffset, 0, new Point3D(0, 0, 1))
+ );
+ sail.getTransforms().setAll(
+ new Rotate(degrees, 0, -meshType.sailOffset,0, new Point3D(0, 0, 1))
+ );
+ }
}
public void hideSail() {
@@ -69,4 +71,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/java/seng302/visualiser/fxObjects/assets_3D/BoatObject.java b/src/main/java/seng302/visualiser/fxObjects/assets_3D/BoatObject.java
index 57975935..abf969a8 100644
--- a/src/main/java/seng302/visualiser/fxObjects/assets_3D/BoatObject.java
+++ b/src/main/java/seng302/visualiser/fxObjects/assets_3D/BoatObject.java
@@ -11,7 +11,7 @@ import javafx.scene.transform.Rotate;
/**
* BoatGroup is a javafx group that by default contains a graphical objects for representing a 2
* dimensional boat. It contains a single polygon for the boat, a group of lines to show it's path,
- * a wake object and two text labels to annotate the boat teams name and the boats velocity. The
+ * a wake object and two text labels to annotate the boat teams name and the boatTypes velocity. The
* boat will update it's position onscreen everytime UpdatePosition is called unless the window is
* minimized in which case it attempts to store animations and apply them when the window is
* maximised.
@@ -28,15 +28,15 @@ public class BoatObject extends Group {
private Group wake;
private Color colour = Color.BLACK;
private Boolean isSelected = false;
- private Rotate rotation = new Rotate(0,0,1);
+ private Rotate rotation = new Rotate(0, new Point3D(0,0,1));
private List selectedBoatListenerListeners = new ArrayList<>();
/**
* Creates a BoatGroup with the default triangular boat polygon.
*/
- public BoatObject() {
- boatAssets = ModelFactory.boatGameView(BoatMeshType.DINGHY, colour);
+ public BoatObject(BoatMeshType boatMeshType) {
+ boatAssets = ModelFactory.boatGameView(boatMeshType, colour);
boatAssets.hideSail();
boatAssets.getAssets().getTransforms().addAll(
rotation
@@ -66,8 +66,6 @@ public class BoatObject extends Group {
* @param windDir .
*/
public void moveTo(double x, double y, double rotation, double velocity, Boolean sailIn, double windDir) {
- Double dx = Math.abs(boatAssets.getAssets().getLayoutX() - x);
- Double dy = Math.abs(boatAssets.getAssets().getLayoutY() - y);
Platform.runLater(() -> {
rotateTo(rotation, sailIn, windDir);
this.layoutXProperty().setValue(x);
diff --git a/src/main/java/seng302/visualiser/fxObjects/assets_3D/ModelFactory.java b/src/main/java/seng302/visualiser/fxObjects/assets_3D/ModelFactory.java
index b49c36c1..91f832ad 100644
--- a/src/main/java/seng302/visualiser/fxObjects/assets_3D/ModelFactory.java
+++ b/src/main/java/seng302/visualiser/fxObjects/assets_3D/ModelFactory.java
@@ -7,6 +7,7 @@ import javafx.geometry.Point3D;
import javafx.scene.AmbientLight;
import javafx.scene.CacheHint;
import javafx.scene.Group;
+import javafx.scene.PointLight;
import javafx.scene.paint.Color;
import javafx.scene.paint.PhongMaterial;
import javafx.scene.shape.Circle;
@@ -18,7 +19,7 @@ import javafx.scene.transform.Translate;
/**
- * Factory class for creating 3D models of boats.
+ * Factory class for creating 3D models of boatTypes.
*/
public class ModelFactory {
@@ -51,6 +52,35 @@ public class ModelFactory {
return bo;
}
+ public static BoatModel boatCustomiseView(BoatMeshType boatType, Color primaryColour) {
+ Group boatAssets = getUnmodifiedBoatModel(boatType, primaryColour);
+ final Rotate animationRotate = new Rotate(0, new Point3D(0,0,1));
+ boatAssets.getTransforms().addAll(
+ new Scale(8.0, 8.0, 8.0),
+ new Rotate(-70, new Point3D(1,0,0)),
+ new Translate(16,50, 1),
+ animationRotate
+ );
+
+ boatAssets.getTransforms().add(animationRotate);
+ BoatModel bo = new BoatModel(boatAssets, null, boatType);
+ bo.rotateSail(45);
+
+ bo.setAnimation(new AnimationTimer() {
+ double boatAngle = 0;
+ Rotate rotate = animationRotate;
+ @Override
+ public void handle(long now) {
+ boatAngle += 0.5;
+ rotate.setAngle(boatAngle);
+ }
+ });
+ boatAssets.getChildren().addAll(
+ new AmbientLight()
+ );
+ return bo;
+ }
+
public static BoatModel boatRotatingView(BoatMeshType boatType, Color primaryColour) {
Group boatAssets = getUnmodifiedBoatModel(boatType, primaryColour);
boatAssets.getTransforms().addAll(
@@ -84,20 +114,29 @@ public class ModelFactory {
}
private static Group getUnmodifiedBoatModel(BoatMeshType boatType, Color primaryColour) {
+
Group boatAssets = new Group();
- MeshView hull = importFile(boatType.hullFile);
+ MeshView hull = importSTL(boatType.hullFile);
hull.setMaterial(new PhongMaterial(primaryColour));
- MeshView mast = importFile(boatType.mastFile);
+ MeshView mast = importSTL(boatType.mastFile);
mast.setMaterial(new PhongMaterial(primaryColour));
- MeshView sail = importFile(boatType.sailFile);
+ MeshView sail = importSTL(boatType.sailFile);
sail.setMaterial(new PhongMaterial(Color.WHITE));
- boatAssets.getChildren().addAll(hull, mast, sail);
+
+ if (boatType.jibFile != null) {
+ MeshView jib = importSTL(boatType.jibFile);
+ sail.setMaterial(new PhongMaterial(Color.WHITE));
+ boatAssets.getChildren().addAll(hull, mast, sail, jib);
+ } else {
+ boatAssets.getChildren().addAll(hull, mast, sail);
+ }
+
return boatAssets;
}
- private static MeshView importFile(String fileName) {
+ private static MeshView importSTL(String fileName) {
StlMeshImporter importer = new StlMeshImporter();
- importer.read(ModelFactory.class.getResource("/meshes/" + fileName));
+ importer.read(ModelFactory.class.getResource("/meshes/boatSTLs/" + fileName));
MeshView importedFile = new MeshView(importer.getImport());
importedFile.setCache(true);
importedFile.setCacheHint(CacheHint.SCALE_AND_ROTATE);
diff --git a/src/main/java/seng302/visualiser/test3d.java b/src/main/java/seng302/visualiser/test3d.java
deleted file mode 100644
index 6440e563..00000000
--- a/src/main/java/seng302/visualiser/test3d.java
+++ /dev/null
@@ -1,108 +0,0 @@
-package seng302.visualiser;
-
-import com.interactivemesh.jfx.importer.stl.StlMeshImporter;
-import javafx.animation.AnimationTimer;
-import javafx.application.Application;
-import javafx.geometry.Point3D;
-import javafx.scene.Camera;
-import javafx.scene.Group;
-import javafx.scene.PerspectiveCamera;
-import javafx.scene.Scene;
-import javafx.scene.SceneAntialiasing;
-import javafx.scene.paint.Color;
-import javafx.scene.paint.PhongMaterial;
-import javafx.scene.shape.MeshView;
-import javafx.scene.transform.Rotate;
-import javafx.scene.transform.Scale;
-import javafx.scene.transform.Translate;
-import javafx.stage.Stage;
-
-/**
- * Created by cir27 on 7/09/17.
- */
-public class test3d extends Application {
-
- Group root = new Group();
- Scene scene;
-
- @Override
- public void start(Stage primaryStage) throws Exception {
-// camera = new PerspectiveCamera();
-// gameObjects = new Group();
-// root3D = new Group(camera, gameObjects);
- scene = new Scene(
- root, 1000, 1000, true, SceneAntialiasing.BALANCED
- );
- gameView3DTest();
- primaryStage.setScene(scene);
- primaryStage.show();
-// scene.setCamera(camera);
-// primaryStage.setScene(scene);
-// primaryStage.show();
-//
-// StlMeshImporter importer = new StlMeshImporter();
-// importer.read(test3d.class.getResource("/meshes/dinghy_hull.stl").toString());
-// MeshView boat = new MeshView(importer.getImport());
-// boat.setMaterial(new PhongMaterial(Color.GREENYELLOW));
-//
-// importer = new StlMeshImporter();
-// importer.read(getClass().getResource("/meshes/dinghy_mast.stl").toString());
-// MeshView mast = new MeshView(importer.getImport());
-// mast.setMaterial(new PhongMaterial(Color.GREENYELLOW));
-//
-// importer = new StlMeshImporter();
-// importer.read(getClass().getResource("/meshes/dinghy_sail.stl").toString());
-// MeshView sail = new MeshView(importer.getImport());
-// sail.setMaterial(new PhongMaterial(Color.LIGHTGREY));
-//
-// gameObjects.getChildren().addAll(boat, mast, sail);
-//
-// gameObjects.getTransforms().add(new Scale(25, 25,25));
-// gameObjects.getTransforms().add(new Translate(15, 20,0));
-// gameObjects.getTransforms().addAll(
-// new Rotate(90, new Point3D(0,0,1)),
-// new Rotate(90, new Point3D(0, 1, 0))
-// );
-//
-//// PointLight light = new PointLight();
-//// light.setLightOn(true);
-//// light.getTransforms().add(new Translate(15, 20, 0));
-////
-//// PointLight light2 = new PointLight();
-//// light2.setLightOn(true);
-//// light2.getTransforms().add(new Translate(30, 40, 0));
-//
-//// root3D.getChildren().addAll(light);
-//
-// scene.setOnKeyPressed(event -> {
-// switch (event.getCode()) {
-// case UP:
-// gameObjects.getTransforms().add(new Rotate(5, new Point3D(0,0,1)));
-// break;
-// case DOWN:
-// gameObjects.getTransforms().add(new Rotate(-5, new Point3D(0,0,1)));
-// break;
-// case LEFT:
-// gameObjects.getTransforms().add(new Rotate(-5, new Point3D(0,1,0)));
-// break;
-// case RIGHT:
-// gameObjects.getTransforms().add(new Rotate(5, new Point3D(0,1,0)));
-// break;
-// }
-// });
-//
-// AnimationTimer animationTimer = new AnimationTimer() {
-// @Override
-// public void handle(long now) {
-// sail.getTransforms().add(new Rotate(0.5, 0, -1.36653, 0, new Point3D(0, 0, 1)));
-// }
-// };
-//
-//// animationTimer.start();
- }
-
- private void gameView3DTest() {
- GameView3D gameView3D = new GameView3D();
- root.getChildren().add(gameView3D.getAssets());
- }
-}
diff --git a/src/main/resources/meshes/boatSTLs/catamaran_hull.stl b/src/main/resources/meshes/boatSTLs/catamaran_hull.stl
new file mode 100644
index 00000000..a7f70e54
Binary files /dev/null and b/src/main/resources/meshes/boatSTLs/catamaran_hull.stl differ
diff --git a/src/main/resources/meshes/boatSTLs/catamaran_mast.stl b/src/main/resources/meshes/boatSTLs/catamaran_mast.stl
new file mode 100644
index 00000000..536184da
Binary files /dev/null and b/src/main/resources/meshes/boatSTLs/catamaran_mast.stl differ
diff --git a/src/main/resources/meshes/boatSTLs/catamaran_sail.stl b/src/main/resources/meshes/boatSTLs/catamaran_sail.stl
new file mode 100644
index 00000000..273b1d5b
Binary files /dev/null and b/src/main/resources/meshes/boatSTLs/catamaran_sail.stl differ
diff --git a/src/main/resources/meshes/boatSTLs/dinghy_hull.stl b/src/main/resources/meshes/boatSTLs/dinghy_hull.stl
new file mode 100644
index 00000000..9450b75f
Binary files /dev/null and b/src/main/resources/meshes/boatSTLs/dinghy_hull.stl differ
diff --git a/src/main/resources/meshes/boatSTLs/dinghy_mast.stl b/src/main/resources/meshes/boatSTLs/dinghy_mast.stl
new file mode 100644
index 00000000..2ab71fcf
Binary files /dev/null and b/src/main/resources/meshes/boatSTLs/dinghy_mast.stl differ
diff --git a/src/main/resources/meshes/boatSTLs/dinghy_sail.stl b/src/main/resources/meshes/boatSTLs/dinghy_sail.stl
new file mode 100644
index 00000000..f10f0c78
Binary files /dev/null and b/src/main/resources/meshes/boatSTLs/dinghy_sail.stl differ
diff --git a/src/main/resources/meshes/boatSTLs/pirateship_frontsail.stl b/src/main/resources/meshes/boatSTLs/pirateship_frontsail.stl
new file mode 100644
index 00000000..b344e825
Binary files /dev/null and b/src/main/resources/meshes/boatSTLs/pirateship_frontsail.stl differ
diff --git a/src/main/resources/meshes/boatSTLs/pirateship_hull.stl b/src/main/resources/meshes/boatSTLs/pirateship_hull.stl
new file mode 100644
index 00000000..b15804b8
Binary files /dev/null and b/src/main/resources/meshes/boatSTLs/pirateship_hull.stl differ
diff --git a/src/main/resources/meshes/boatSTLs/pirateship_mainsail.stl b/src/main/resources/meshes/boatSTLs/pirateship_mainsail.stl
new file mode 100644
index 00000000..c421901a
Binary files /dev/null and b/src/main/resources/meshes/boatSTLs/pirateship_mainsail.stl differ
diff --git a/src/main/resources/meshes/boatSTLs/pirateship_mast.stl b/src/main/resources/meshes/boatSTLs/pirateship_mast.stl
new file mode 100644
index 00000000..d15ab860
Binary files /dev/null and b/src/main/resources/meshes/boatSTLs/pirateship_mast.stl differ
diff --git a/src/main/resources/meshes/dinghy_hull.stl b/src/main/resources/meshes/dinghy_hull.stl
deleted file mode 100644
index 56a443a7..00000000
Binary files a/src/main/resources/meshes/dinghy_hull.stl and /dev/null differ
diff --git a/src/main/resources/meshes/dinghy_mast.stl b/src/main/resources/meshes/dinghy_mast.stl
deleted file mode 100644
index d4040f90..00000000
Binary files a/src/main/resources/meshes/dinghy_mast.stl and /dev/null differ
diff --git a/src/main/resources/meshes/dinghy_sail.stl b/src/main/resources/meshes/dinghy_sail.stl
deleted file mode 100644
index 12f4b334..00000000
Binary files a/src/main/resources/meshes/dinghy_sail.stl and /dev/null differ
diff --git a/src/main/resources/server_config/xml_templates/boats.ftlh b/src/main/resources/server_config/xml_templates/boats.ftlh
index 8186e000..26fae383 100644
--- a/src/main/resources/server_config/xml_templates/boats.ftlh
+++ b/src/main/resources/server_config/xml_templates/boats.ftlh
@@ -12,7 +12,7 @@
<#list boats as boat>
-
diff --git a/src/main/resources/views/dialogs/BoatCustomizeDialog.fxml b/src/main/resources/views/dialogs/BoatCustomizeDialog.fxml
index 8e8653cf..809b96a2 100644
--- a/src/main/resources/views/dialogs/BoatCustomizeDialog.fxml
+++ b/src/main/resources/views/dialogs/BoatCustomizeDialog.fxml
@@ -1,5 +1,11 @@
+
+
+
+
+
+
@@ -10,54 +16,45 @@
-
+
+
-
-
-
-
+
+
+
+
+
+
-
-
-
+
+
+
-
+
-
-
+
+
-
+
-
@@ -65,11 +62,45 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
diff --git a/src/test/java/seng302/model/UpdateYachtTest.java b/src/test/java/seng302/model/UpdateYachtTest.java
index 7eaaf990..79c02cb2 100644
--- a/src/test/java/seng302/model/UpdateYachtTest.java
+++ b/src/test/java/seng302/model/UpdateYachtTest.java
@@ -5,6 +5,7 @@ import org.junit.Before;
import org.junit.Test;
import seng302.gameServer.GameState;
import seng302.utilities.GeoUtility;
+import seng302.visualiser.fxObjects.assets_3D.BoatMeshType;
import static seng302.gameServer.GameState.checkCollision;
@@ -14,8 +15,10 @@ import static seng302.gameServer.GameState.checkCollision;
*/
public class UpdateYachtTest {
- private ServerYacht yacht1 = new ServerYacht("Yacht", 1, "1", "Yacht" + 1, "Yacht" + 1, "Test1");
- private ServerYacht yacht2 = new ServerYacht("Yacht", 2, "2", "Yacht" + 2, "Yacht" + 2, "Test2");
+ private ServerYacht yacht1 = new ServerYacht(BoatMeshType.DINGHY, 1, "1", "Yacht" + 1,
+ "Yacht" + 1, "Test1");
+ private ServerYacht yacht2 = new ServerYacht(BoatMeshType.DINGHY, 2, "2", "Yacht" + 2,
+ "Yacht" + 2, "Test2");
private GeoPoint geoPoint1 = new GeoPoint(50.0, 50.0);
private GeoPoint geoPoint2 = GeoUtility.getGeoCoordinate(geoPoint1, 90.0, 50.0);
diff --git a/src/test/java/seng302/models/YachtTest.java b/src/test/java/seng302/models/YachtTest.java
index 3f342ff5..b73dc61c 100644
--- a/src/test/java/seng302/models/YachtTest.java
+++ b/src/test/java/seng302/models/YachtTest.java
@@ -4,6 +4,7 @@ import org.junit.AfterClass;
import org.junit.BeforeClass;
import seng302.gameServer.GameState;
import seng302.model.ServerYacht;
+import seng302.visualiser.fxObjects.assets_3D.BoatMeshType;
public class YachtTest {
@@ -17,7 +18,7 @@ public class YachtTest {
@BeforeClass
public static void setUp() {
new GameState("localhost");
- y1 = new ServerYacht("Yacht", 1, "Y1", "Y1", "Yacht 1", "C1");
+ y1 = new ServerYacht(BoatMeshType.DINGHY, 1, "Y1", "Y1", "Yacht 1", "C1");
gs = new GameState("localhost");
}
diff --git a/src/test/java/seng302/utilities/BoatMeshTypeTest.java b/src/test/java/seng302/utilities/BoatMeshTypeTest.java
new file mode 100644
index 00000000..8f0d30b9
--- /dev/null
+++ b/src/test/java/seng302/utilities/BoatMeshTypeTest.java
@@ -0,0 +1,28 @@
+package seng302.utilities;
+
+import org.junit.Assert;
+import org.junit.Test;
+import seng302.visualiser.fxObjects.assets_3D.BoatMeshType;
+
+/**
+ * Basic tests for the next and previous methods
+ * Created by kre39 on 20/09/17.
+ */
+public class BoatMeshTypeTest {
+
+
+ @Test
+ public void testNextBoatMeshType() {
+ BoatMeshType currentBoat = BoatMeshType.DINGHY;
+ BoatMeshType nextBoat = BoatMeshType.getNextBoatType(currentBoat);
+ Assert.assertEquals(BoatMeshType.CATAMARAN, nextBoat);
+ }
+
+ @Test
+ public void testPreviousBoatMeshType() {
+ BoatMeshType currentBoat = BoatMeshType.CATAMARAN;
+ BoatMeshType prevBoat = BoatMeshType.getPrevBoatType(currentBoat);
+ Assert.assertEquals(BoatMeshType.DINGHY, prevBoat);
+ }
+
+}
diff --git a/src/test/java/seng302/visualiser/map/BoatSailAnimationToggleTest.java b/src/test/java/seng302/visualiser/map/BoatSailAnimationToggleTest.java
index 70c5c80b..9e95f169 100644
--- a/src/test/java/seng302/visualiser/map/BoatSailAnimationToggleTest.java
+++ b/src/test/java/seng302/visualiser/map/BoatSailAnimationToggleTest.java
@@ -6,6 +6,7 @@ import static org.junit.Assert.assertTrue;
import org.junit.Before;
import org.junit.Test;
import seng302.model.ClientYacht;
+import seng302.visualiser.fxObjects.assets_3D.BoatMeshType;
/**
* Created by kre39 on 6/08/17.
@@ -16,7 +17,7 @@ public class BoatSailAnimationToggleTest {
@Before
public void setup() throws Exception{
- yacht = new ClientYacht("Yacht", 1, "YACHT", "YAC", "Test Yacht", "NZ");
+ yacht = new ClientYacht(BoatMeshType.DINGHY, 1, "YACHT", "YAC", "Test Yacht", "NZ");
}
@Test
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 {