mirror of
https://github.com/michaelrausch/Party-Parrots-At-Sea.git
synced 2026-05-09 14:28:43 +00:00
Completed working boat selection screen.
When a user selects a different boat, it is sent to all other clients and updates accordingly. Boats are all shown with their correct models in game. #story[1274]
This commit is contained in:
@@ -424,4 +424,8 @@ public class ServerYacht {
|
|||||||
public void setBoatType(String boatType) {
|
public void setBoatType(String boatType) {
|
||||||
this.boatType = boatType;
|
this.boatType = boatType;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getBoatType() {
|
||||||
|
return boatType;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -146,11 +146,9 @@ public class XMLParser {
|
|||||||
XMLParser.getNodeAttributeString(currentBoat, "BoatName"),
|
XMLParser.getNodeAttributeString(currentBoat, "BoatName"),
|
||||||
XMLParser.getNodeAttributeString(currentBoat, "Country"));
|
XMLParser.getNodeAttributeString(currentBoat, "Country"));
|
||||||
yacht.setColour(Color.web(getNodeAttributeString(currentBoat, "Color")));
|
yacht.setColour(Color.web(getNodeAttributeString(currentBoat, "Color")));
|
||||||
if (yacht.getBoatType().equals("Yacht")) {
|
|
||||||
competingBoats.put(yacht.getSourceId(), yacht);
|
competingBoats.put(yacht.getSourceId(), yacht);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return competingBoats;
|
return competingBoats;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ import seng302.model.token.Token;
|
|||||||
import seng302.utilities.GeoUtility;
|
import seng302.utilities.GeoUtility;
|
||||||
import seng302.utilities.Sounds;
|
import seng302.utilities.Sounds;
|
||||||
import seng302.visualiser.fxObjects.MarkArrowFactory;
|
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.BoatObject;
|
||||||
import seng302.visualiser.fxObjects.assets_3D.Marker3D;
|
import seng302.visualiser.fxObjects.assets_3D.Marker3D;
|
||||||
import seng302.visualiser.fxObjects.assets_3D.ModelFactory;
|
import seng302.visualiser.fxObjects.assets_3D.ModelFactory;
|
||||||
@@ -459,7 +460,7 @@ public class GameView3D {
|
|||||||
final List<Group> wakes = new ArrayList<>();
|
final List<Group> wakes = new ArrayList<>();
|
||||||
for (ClientYacht clientYacht : yachts) {
|
for (ClientYacht clientYacht : yachts) {
|
||||||
Color colour = clientYacht.getColour();
|
Color colour = clientYacht.getColour();
|
||||||
newBoat = new BoatObject();
|
newBoat = new BoatObject(BoatMeshType.getBoatMeshType(clientYacht.getBoatType()));
|
||||||
newBoat.setFill(colour);
|
newBoat.setFill(colour);
|
||||||
boatObjects.put(clientYacht, newBoat);
|
boatObjects.put(clientYacht, newBoat);
|
||||||
wakesGroup.getChildren().add(newBoat.getWake());
|
wakesGroup.getChildren().add(newBoat.getWake());
|
||||||
|
|||||||
@@ -130,7 +130,8 @@ public class LobbyController implements Initializable {
|
|||||||
controller.setPlayerName(this.playerBoats
|
controller.setPlayerName(this.playerBoats
|
||||||
.get(ViewManager.getInstance().getGameClient().getServerThread().getClientId())
|
.get(ViewManager.getInstance().getGameClient().getServerThread().getClientId())
|
||||||
.getBoatName());
|
.getBoatName());
|
||||||
controller.setCurrentBoat(BoatMeshType.DINGHY);
|
controller.setCurrentBoat(this.playerBoats.get(ViewManager.getInstance().getGameClient().getServerThread().getClientId())
|
||||||
|
.getBoatType());
|
||||||
|
|
||||||
return customizationDialog;
|
return customizationDialog;
|
||||||
}
|
}
|
||||||
@@ -204,7 +205,7 @@ public class LobbyController implements Initializable {
|
|||||||
FXMLLoader loader = new FXMLLoader(
|
FXMLLoader loader = new FXMLLoader(
|
||||||
getClass().getResource("/views/cells/PlayerCell.fxml"));
|
getClass().getResource("/views/cells/PlayerCell.fxml"));
|
||||||
|
|
||||||
loader.setController(new PlayerCell(playerId, yacht.getBoatName(), yacht.getColour()));
|
loader.setController(new PlayerCell(playerId, yacht.getBoatName(), yacht.getColour(), yacht.getBoatType()));
|
||||||
|
|
||||||
try {
|
try {
|
||||||
pane = loader.load();
|
pane = loader.load();
|
||||||
|
|||||||
@@ -278,6 +278,8 @@ public class ViewManager {
|
|||||||
|
|
||||||
stage.setMinHeight(500);
|
stage.setMinHeight(500);
|
||||||
stage.setMinWidth(800);
|
stage.setMinWidth(800);
|
||||||
|
stage.setTitle("Party Parrots At Sea");
|
||||||
|
stage.getIcons().add(new Image(getClass().getResourceAsStream("/PP.png")));
|
||||||
stage.setOnCloseRequest(e -> closeAll());
|
stage.setOnCloseRequest(e -> closeAll());
|
||||||
stage.setScene(scene);
|
stage.setScene(scene);
|
||||||
stage.show();
|
stage.show();
|
||||||
|
|||||||
@@ -24,11 +24,13 @@ public class PlayerCell {
|
|||||||
private String name;
|
private String name;
|
||||||
private Color boatColor;
|
private Color boatColor;
|
||||||
private Integer playerId;
|
private Integer playerId;
|
||||||
|
private BoatMeshType boatype;
|
||||||
|
|
||||||
public PlayerCell(Integer playerId, String playerName, Color color) {
|
public PlayerCell(Integer playerId, String playerName, Color color, String boatType) {
|
||||||
this.playerId = playerId;
|
this.playerId = playerId;
|
||||||
this.name = playerName;
|
this.name = playerName;
|
||||||
this.boatColor = color;
|
this.boatColor = color;
|
||||||
|
this.boatype = BoatMeshType.getBoatMeshType(boatType);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void initialize() {
|
public void initialize() {
|
||||||
@@ -37,7 +39,7 @@ public class PlayerCell {
|
|||||||
// Add Rotating Boat to Player Cell with players color on it.
|
// Add Rotating Boat to Player Cell with players color on it.
|
||||||
Group group = new Group();
|
Group group = new Group();
|
||||||
boatPane.getChildren().add(group);
|
boatPane.getChildren().add(group);
|
||||||
BoatModel bo = ModelFactory.boatIconView(BoatMeshType.PIRATE_SHIP, this.boatColor);
|
BoatModel bo = ModelFactory.boatIconView(this.boatype, this.boatColor);
|
||||||
group.getChildren().add(bo.getAssets());
|
group.getChildren().add(bo.getAssets());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import javafx.fxml.FXML;
|
|||||||
import javafx.fxml.Initializable;
|
import javafx.fxml.Initializable;
|
||||||
import javafx.geometry.Insets;
|
import javafx.geometry.Insets;
|
||||||
import javafx.scene.Group;
|
import javafx.scene.Group;
|
||||||
|
import javafx.scene.PointLight;
|
||||||
import javafx.scene.layout.Background;
|
import javafx.scene.layout.Background;
|
||||||
import javafx.scene.layout.BackgroundFill;
|
import javafx.scene.layout.BackgroundFill;
|
||||||
import javafx.scene.layout.CornerRadii;
|
import javafx.scene.layout.CornerRadii;
|
||||||
@@ -111,21 +112,35 @@ public class BoatCustomizeController implements Initializable{
|
|||||||
this.lobbyController = lobbyController;
|
this.lobbyController = lobbyController;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setCurrentBoat(BoatMeshType boatType) {
|
public void setCurrentBoat(String boatType) {
|
||||||
Group group = new Group();
|
Group group = new Group();
|
||||||
this.currentBoat = boatType;
|
this.currentBoat = BoatMeshType.getBoatMeshType(boatType);
|
||||||
System.out.println(boatType.toString());
|
System.out.println(boatType.toString());
|
||||||
boatPane.setBackground(new Background(new BackgroundFill(Color.SKYBLUE, CornerRadii.EMPTY, Insets.EMPTY)));
|
boatPane.setBackground(new Background(new BackgroundFill(Color.SKYBLUE, CornerRadii.EMPTY, Insets.EMPTY)));
|
||||||
boatPane.getChildren().add(group);
|
boatPane.getChildren().add(group);
|
||||||
BoatModel bo = ModelFactory.boatCustomiseView(boatType, colorPicker.getValue());
|
BoatModel bo = ModelFactory.boatCustomiseView(currentBoat, colorPicker.getValue());
|
||||||
group.getChildren().add(bo.getAssets());
|
group.getChildren().add(bo.getAssets());
|
||||||
|
group.getChildren().add(new PointLight());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void nextBoat(ActionEvent actionEvent) {
|
public void nextBoat(ActionEvent actionEvent) {
|
||||||
boatPane.getChildren().clear();
|
boatPane.getChildren().clear();
|
||||||
|
Group group = new Group();
|
||||||
|
boatPane.getChildren().add(group);
|
||||||
|
currentBoat = BoatMeshType.getNextBoatType(currentBoat);
|
||||||
|
BoatModel bo = ModelFactory.boatCustomiseView(currentBoat, colorPicker.getValue());
|
||||||
|
group.getChildren().add(bo.getAssets());
|
||||||
|
group.getChildren().add(new PointLight());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void prevBoat(ActionEvent actionEvent) {
|
public void prevBoat(ActionEvent actionEvent) {
|
||||||
|
boatPane.getChildren().clear();
|
||||||
|
Group group = new Group();
|
||||||
|
boatPane.getChildren().add(group);
|
||||||
|
currentBoat = BoatMeshType.getPrevBoatType(currentBoat);
|
||||||
|
BoatModel bo = ModelFactory.boatCustomiseView(currentBoat, colorPicker.getValue());
|
||||||
|
group.getChildren().add(bo.getAssets());
|
||||||
|
group.getChildren().add(new PointLight());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void RefreshBoat() {
|
private void RefreshBoat() {
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ public enum BoatMeshType {
|
|||||||
final String hullFile, mastFile, sailFile, jibFile;
|
final String hullFile, mastFile, sailFile, jibFile;
|
||||||
final double mastOffset, sailOffset;
|
final double mastOffset, sailOffset;
|
||||||
final boolean fixedSail;
|
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,
|
BoatMeshType(String hullFile, String mastFile, double mastOffset, String sailFile,
|
||||||
double sailOffset, String jibFile, boolean fixedSail) {
|
double sailOffset, String jibFile, boolean fixedSail) {
|
||||||
@@ -27,4 +28,41 @@ public enum BoatMeshType {
|
|||||||
this.jibFile = jibFile;
|
this.jibFile = jibFile;
|
||||||
this.fixedSail = fixedSail;
|
this.fixedSail = fixedSail;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static BoatMeshType getBoatMeshType(String boatType) {
|
||||||
|
switch (boatType){
|
||||||
|
case "DINGHY":
|
||||||
|
return DINGHY;
|
||||||
|
case "CAT_ATE_A_MERINGUE":
|
||||||
|
return CAT_ATE_A_MERINGUE;
|
||||||
|
case "PIRATE_SHIP":
|
||||||
|
return PIRATE_SHIP;
|
||||||
|
default:
|
||||||
|
return DINGHY;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//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) {
|
||||||
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
* 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,
|
* 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
|
* 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
|
* minimized in which case it attempts to store animations and apply them when the window is
|
||||||
* maximised.
|
* maximised.
|
||||||
@@ -35,8 +35,8 @@ public class BoatObject extends Group {
|
|||||||
/**
|
/**
|
||||||
* Creates a BoatGroup with the default triangular boat polygon.
|
* Creates a BoatGroup with the default triangular boat polygon.
|
||||||
*/
|
*/
|
||||||
public BoatObject() {
|
public BoatObject(BoatMeshType boatMeshType) {
|
||||||
boatAssets = ModelFactory.boatGameView(BoatMeshType.PIRATE_SHIP, colour);
|
boatAssets = ModelFactory.boatGameView(boatMeshType, colour);
|
||||||
boatAssets.hideSail();
|
boatAssets.hideSail();
|
||||||
boatAssets.getAssets().getTransforms().addAll(
|
boatAssets.getAssets().getTransforms().addAll(
|
||||||
rotation
|
rotation
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import javafx.geometry.Point3D;
|
|||||||
import javafx.scene.AmbientLight;
|
import javafx.scene.AmbientLight;
|
||||||
import javafx.scene.CacheHint;
|
import javafx.scene.CacheHint;
|
||||||
import javafx.scene.Group;
|
import javafx.scene.Group;
|
||||||
|
import javafx.scene.PointLight;
|
||||||
import javafx.scene.paint.Color;
|
import javafx.scene.paint.Color;
|
||||||
import javafx.scene.paint.PhongMaterial;
|
import javafx.scene.paint.PhongMaterial;
|
||||||
import javafx.scene.shape.Circle;
|
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 {
|
public class ModelFactory {
|
||||||
|
|
||||||
@@ -57,7 +58,7 @@ public class ModelFactory {
|
|||||||
boatAssets.getTransforms().addAll(
|
boatAssets.getTransforms().addAll(
|
||||||
new Scale(8.0, 8.0, 8.0),
|
new Scale(8.0, 8.0, 8.0),
|
||||||
new Rotate(-70, new Point3D(1,0,0)),
|
new Rotate(-70, new Point3D(1,0,0)),
|
||||||
new Translate(16,50, 0),
|
new Translate(16,50, 1),
|
||||||
animationRotate
|
animationRotate
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
</BoatShapes>
|
</BoatShapes>
|
||||||
<Boats>
|
<Boats>
|
||||||
<#list boats as boat>
|
<#list boats as boat>
|
||||||
<Boat Type="Yacht" SourceID="${boat.sourceId}" ShapeID="4" HullNum="${boat.hullID}" StoweName="${boat.shortName}" ShortName="${boat.shortName}"
|
<Boat Type="${boat.boatType}" SourceID="${boat.sourceId}" ShapeID="4" HullNum="${boat.hullID}" StoweName="${boat.shortName}" ShortName="${boat.shortName}"
|
||||||
BoatName="${boat.boatName}" Country="${boat.country}" Color="${boat.boatColor}">
|
BoatName="${boat.boatName}" Country="${boat.country}" Color="${boat.boatColor}">
|
||||||
<GPSposition Z="0" Y="3.7" X="0" />
|
<GPSposition Z="0" Y="3.7" X="0" />
|
||||||
<MastTop Z="0" Y="6.2" X="0" />
|
<MastTop Z="0" Y="6.2" X="0" />
|
||||||
|
|||||||
@@ -0,0 +1,35 @@
|
|||||||
|
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.CAT_ATE_A_MERINGUE, nextBoat);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testPreviousBoatMeshType() {
|
||||||
|
BoatMeshType currentBoat = BoatMeshType.CAT_ATE_A_MERINGUE;
|
||||||
|
BoatMeshType prevBoat = BoatMeshType.getPrevBoatType(currentBoat);
|
||||||
|
Assert.assertEquals(BoatMeshType.DINGHY, prevBoat);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testGetBoatMeshType() {
|
||||||
|
BoatMeshType currentBoat = BoatMeshType.getBoatMeshType("DINGHY");
|
||||||
|
Assert.assertEquals(BoatMeshType.DINGHY, currentBoat);
|
||||||
|
BoatMeshType wrongBoat = BoatMeshType.getBoatMeshType("NOT A REAL BOAT");
|
||||||
|
Assert.assertEquals(BoatMeshType.DINGHY, wrongBoat);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user