diff --git a/src/main/java/seng302/gameServer/MessageFactory.java b/src/main/java/seng302/gameServer/MessageFactory.java index 62b5ea0a..a71733cf 100644 --- a/src/main/java/seng302/gameServer/MessageFactory.java +++ b/src/main/java/seng302/gameServer/MessageFactory.java @@ -110,11 +110,6 @@ public class MessageFactory { public static XMLMessage getRegattaXML() { //@TODO calculate lat/lng values - xmlGenerator.setRegattaTemplate( - new RegattaXMLTemplate( - "Party Parrot Test Server", "Bermuda Test Course", - 57.6679590, 11.8503233) - ); return new XMLMessage( xmlGenerator.getRegattaAsXml(), diff --git a/src/main/java/seng302/gameServer/ServerToClientThread.java b/src/main/java/seng302/gameServer/ServerToClientThread.java index f0984dd4..4a2bd158 100644 --- a/src/main/java/seng302/gameServer/ServerToClientThread.java +++ b/src/main/java/seng302/gameServer/ServerToClientThread.java @@ -240,6 +240,8 @@ public class ServerToClientThread implements Runnable { xmlGenerator.setRaceTemplate(race); + System.out.println(xmlGenerator.getRegatta().getName()); + XMLMessage xmlMessage; xmlMessage = new XMLMessage(xmlGenerator.getRegattaAsXml(), XMLMessageSubType.REGATTA, xmlGenerator.getRegattaAsXml().length()); diff --git a/src/main/java/seng302/utilities/XMLGenerator.java b/src/main/java/seng302/utilities/XMLGenerator.java index f118a6e2..5bcde1cc 100644 --- a/src/main/java/seng302/utilities/XMLGenerator.java +++ b/src/main/java/seng302/utilities/XMLGenerator.java @@ -46,7 +46,7 @@ public class XMLGenerator { /** * Create an instance of the XML Generator */ - public XMLGenerator(){ + public XMLGenerator() { setupConfiguration(); } @@ -175,4 +175,8 @@ public class XMLGenerator { public static void setDefaultMapName(String mapName){ DEFAULT_REGATTA.setCourseName(mapName); } + + public RegattaXMLTemplate getRegatta() { + return regatta; + } } \ No newline at end of file diff --git a/src/main/java/seng302/visualiser/GameClient.java b/src/main/java/seng302/visualiser/GameClient.java index a6ae28b3..d0b7b2b7 100644 --- a/src/main/java/seng302/visualiser/GameClient.java +++ b/src/main/java/seng302/visualiser/GameClient.java @@ -217,11 +217,7 @@ public class GameClient { raceView = fxmlLoader.getController(); ClientYacht player = allBoatsMap.get(socketThread.getClientId()); raceView.loadRace(allBoatsMap, courseData, raceState, player); - raceView.getSendPressedProperty().addListener((obs, old, isPressed) -> { - if (isPressed) { - formatAndSendChatMessage(raceView.readChatInput()); - } - }); + } @@ -338,6 +334,12 @@ public class GameClient { ClientYacht player = allBoatsMap.get(socketThread.getClientId()); raceView.loadRace(allBoatsMap, courseData, raceState, player); + + raceView.getSendPressedProperty().addListener((obs, old, isPressed) -> { + if (isPressed) { + formatAndSendChatMessage(raceView.readChatInput()); + } + }); } } diff --git a/src/main/java/seng302/visualiser/controllers/RaceViewController.java b/src/main/java/seng302/visualiser/controllers/RaceViewController.java index 2a0de0d7..1ae872d0 100644 --- a/src/main/java/seng302/visualiser/controllers/RaceViewController.java +++ b/src/main/java/seng302/visualiser/controllers/RaceViewController.java @@ -1,5 +1,6 @@ package seng302.visualiser.controllers; +import com.jfoenix.controls.JFXButton; import javafx.animation.Timeline; import javafx.application.Platform; import javafx.beans.property.ReadOnlyBooleanProperty; @@ -67,7 +68,7 @@ public class RaceViewController extends Thread implements ImportantAnnotationDel @FXML private CheckBox toggleFps; @FXML - private Text timerLabel; + private Label timerLabel; @FXML private StackPane contentAnchorPane; private GridPane contentGridPane; @@ -133,27 +134,27 @@ public class RaceViewController extends Thread implements ImportantAnnotationDel // windArrow.setLayoutY(windArrowHolder.getHeight() / 2); // selectAnnotationBtn.setOnAction(event -> loadSelectAnnotationView()); -// chatInput.lengthProperty().addListener((obs, oldLen, newLen) -> { -// if (newLen.intValue() > CHAT_LIMIT) { -// chatInput.setText(chatInput.getText().substring(0, CHAT_LIMIT)); -// } + chatInput.lengthProperty().addListener((obs, oldLen, newLen) -> { + if (newLen.intValue() > CHAT_LIMIT) { + chatInput.setText(chatInput.getText().substring(0, CHAT_LIMIT)); + } + }); + chatHistory = new ChatHistory(); + chatHistoryHolder.getChildren().addAll(chatHistory); + chatHistory.prefWidthProperty().bind( + chatHistoryHolder.widthProperty() + ); + chatHistory.prefHeightProperty().bind( + chatHistoryHolder.heightProperty() + ); +// chatHistory.setFitToWidth(true); +// chatHistory.setFitToHeight(true); +// chatHistory.textProperty().addListener((obs, oldValue, newValue) -> { +// chatHistory.setScrollTop(Double.MAX_VALUE); // }); -// chatHistory = new ChatHistory(); -// chatHistoryHolder.getChildren().addAll(chatHistory); -// chatHistory.prefWidthProperty().bind( -// chatHistoryHolder.widthProperty() -// ); -// chatHistory.prefHeightProperty().bind( -// chatHistoryHolder.heightProperty() -// ); -//// chatHistory.setFitToWidth(true); -//// chatHistory.setFitToHeight(true); -//// chatHistory.textProperty().addListener((obs, oldValue, newValue) -> { -//// chatHistory.setScrollTop(Double.MAX_VALUE); -//// }); -// contentGridPane.setOnMouseClicked((event) -> -// contentGridPane.requestFocus() -// ); + rvAnchorPane.setOnMouseClicked((event) -> + rvAnchorPane.requestFocus() + ); } public void loadRace ( @@ -230,13 +231,13 @@ public class RaceViewController extends Thread implements ImportantAnnotationDel // gameView.enableZoom(); // } // }); -// Platform.runLater(() -> { -// initializeUpdateTimer(); + Platform.runLater(() -> { + initializeUpdateTimer(); // initialiseFPSCheckBox(); // initialiseAnnotationSlider(); // initialiseBoatSelectionComboBox(); // initialiseSparkLine(); -// }); + }); } /** @@ -417,7 +418,7 @@ public class RaceViewController extends Thread implements ImportantAnnotationDel timer.scheduleAtFixedRate(new TimerTask() { @Override public void run() { - updateRaceTime(); + Platform.runLater(() -> updateRaceTime()); } }, 0, 1000); } @@ -473,12 +474,11 @@ public class RaceViewController extends Thread implements ImportantAnnotationDel * Updates the clock for the race */ private void updateRaceTime() { -// if (!raceState.isRaceStarted()) { -// timerLabel.setFill(Color.RED); -// timerLabel.setText("Race Finished!"); -// } else { -// timerLabel.setText(raceState.getRaceTimeStr()); -// } + if (raceState.getTimeTillStart() <= 0L && !raceState.isRaceStarted()) { + timerLabel.setText("Race Finished!"); + } else { + timerLabel.setText(raceState.getRaceTimeStr()); + } } /** @@ -719,7 +719,7 @@ public class RaceViewController extends Thread implements ImportantAnnotationDel public String readChatInput() { String chat = chatInput.getText(); chatInput.clear(); - basePane.requestFocus(); + rvAnchorPane.requestFocus(); return chat; } diff --git a/src/main/java/seng302/visualiser/controllers/ViewManager.java b/src/main/java/seng302/visualiser/controllers/ViewManager.java index 06e6c527..e9deb035 100644 --- a/src/main/java/seng302/visualiser/controllers/ViewManager.java +++ b/src/main/java/seng302/visualiser/controllers/ViewManager.java @@ -91,6 +91,17 @@ public class ViewManager { Sounds.stopMusic(); Sounds.playMenuMusic(); + + decorator.setOnCloseButtonAction(() -> { + try { + ServerAdvertiser.getInstance().unregister(); + } catch (IOException e) { + logger.warn("Couldn't unregister server"); + } + + gameClient.stopGame(); + System.exit(0); + }); } private void checkCompatibility() { @@ -207,8 +218,14 @@ public class ViewManager { } }); - Sounds.stopMusic(); - Sounds.playRaceMusic(); + while (loader.getController() == null){ + try { + Thread.sleep(50); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + return loader.getController(); } diff --git a/src/main/java/seng302/visualiser/fxObjects/assets_2D/BoatObject.java b/src/main/java/seng302/visualiser/fxObjects/assets_2D/BoatObject.java index 3b00a9e3..6c8c7fbd 100644 --- a/src/main/java/seng302/visualiser/fxObjects/assets_2D/BoatObject.java +++ b/src/main/java/seng302/visualiser/fxObjects/assets_2D/BoatObject.java @@ -246,7 +246,6 @@ public class BoatObject extends Group { wake.getTransforms().setAll(new Rotate(heading, new Point3D(0,0,1))); if (sailsIn) { boatAssets.showSail(); - System.out.println("heading = " + heading); Double sailWindOffset = 30.0; Double upwindAngleLimit = 15.0; Double downwindAngleLimit = 10.0; //Upwind from normalised horizontal diff --git a/src/main/resources/css/raceView.css b/src/main/resources/css/raceView.css new file mode 100644 index 00000000..1c137bf2 --- /dev/null +++ b/src/main/resources/css/raceView.css @@ -0,0 +1,16 @@ +#timerGrid{ + -fx-background-color: rgba(255, 255, 255, 0.6); +} + +#timerLabel{ + -fx-font-size: 21px; + -fx-font-family: "Baloo"; +} + +#chatArea{ + -fx-background-color: rgba(255, 255, 255, 0.6); +} + +#raceInfoArea{ + -fx-background-color: rgba(255, 255, 255, 0.6); +} \ No newline at end of file diff --git a/src/main/resources/images/arrow.png b/src/main/resources/images/arrow.png new file mode 100644 index 00000000..5dc55236 Binary files /dev/null and b/src/main/resources/images/arrow.png differ diff --git a/src/main/resources/images/timer.png b/src/main/resources/images/timer.png new file mode 100644 index 00000000..bad61efc Binary files /dev/null and b/src/main/resources/images/timer.png differ diff --git a/src/main/resources/views/RaceView.fxml b/src/main/resources/views/RaceView.fxml index faa0190e..b18890fc 100644 --- a/src/main/resources/views/RaceView.fxml +++ b/src/main/resources/views/RaceView.fxml @@ -1,46 +1,109 @@ - - - + + + + + + + + + + + + + + - + - + - - - + + + - - - + + + - + - - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +