From 7e9e96c091bb3cf7f5eb729f7aabb5fba79c3a63 Mon Sep 17 00:00:00 2001 From: Alistair McIntyre Date: Tue, 12 Sep 2017 16:54:40 +1200 Subject: [PATCH 1/9] - Added documentation to controllers tags : #story[1245] --- .../controllers/LobbyController.java | 17 ++--- .../controllers/ServerListController.java | 30 ++++----- .../controllers/StartScreenController.java | 65 ++++--------------- .../visualiser/controllers/ViewManager.java | 20 ++++++ .../controllers/cells/PlayerCell.java | 11 +--- .../controllers/cells/ServerCell.java | 24 ++----- .../dialogs/BoatCustomizeController.java | 8 +-- .../dialogs/ServerCreationController.java | 11 ++-- src/main/resources/css/Master.css | 1 + src/main/resources/css/StartScreenView.css | 1 + src/main/resources/views/ServerListView.fxml | 7 +- src/main/resources/views/StartScreenView.fxml | 3 +- .../resources/views/cells/ServerCell.fxml | 4 +- 13 files changed, 82 insertions(+), 120 deletions(-) diff --git a/src/main/java/seng302/visualiser/controllers/LobbyController.java b/src/main/java/seng302/visualiser/controllers/LobbyController.java index 7608b252..19b919a1 100644 --- a/src/main/java/seng302/visualiser/controllers/LobbyController.java +++ b/src/main/java/seng302/visualiser/controllers/LobbyController.java @@ -109,6 +109,9 @@ public class LobbyController implements Initializable { initMapPreview(); } + /** + * + */ private void refreshMapView(){ RaceXMLData raceData = ViewManager.getInstance().getGameClient().getCourseData(); List border = raceData.getCourseLimit(); @@ -122,12 +125,8 @@ public class LobbyController implements Initializable { gameView.updateCourse(marks, corners); } - private void getPlayerColors() { - - } - /** - * + * Initializes a top down preview of the race course map. */ private void initMapPreview() { gameView = new GameView(); @@ -163,7 +162,7 @@ public class LobbyController implements Initializable { } /** - * + * Refreshes the list of players and their boats, as a series of VBox PlayerCell objects. */ private void refreshPlayerList() { playerListVBox.getChildren().clear(); @@ -192,17 +191,11 @@ public class LobbyController implements Initializable { } } - /** - * - */ private void leaveLobby() { ViewManager.getInstance().getGameClient().stopGame(); ViewManager.getInstance().goToStartView(); } - /** - * - */ public void disableReadyButton() { this.beginRaceButton.setDisable(true); this.beginRaceButton.setText("Waiting for host..."); diff --git a/src/main/java/seng302/visualiser/controllers/ServerListController.java b/src/main/java/seng302/visualiser/controllers/ServerListController.java index a38e2c97..3d457bd4 100644 --- a/src/main/java/seng302/visualiser/controllers/ServerListController.java +++ b/src/main/java/seng302/visualiser/controllers/ServerListController.java @@ -18,7 +18,6 @@ import javafx.geometry.Pos; import javafx.scene.control.Label; import javafx.scene.control.ScrollPane; import javafx.scene.input.KeyCode; -import javafx.scene.input.MouseEvent; import javafx.scene.layout.StackPane; import javafx.scene.layout.VBox; import org.slf4j.Logger; @@ -57,10 +56,14 @@ public class ServerListController implements Initializable, ServerListenerDelega private Label noServersFound; private Logger logger = LoggerFactory.getLogger(ServerListController.class); + // TODO: 12/09/17 ajm412: break this method down, its way too long. + @Override public void initialize(URL location, ResourceBundle resources) { serverListVBox.minWidthProperty().bind(serverListScrollPane.widthProperty()); // Set Event Bindings + connectButton.setOnMouseEntered(event -> Sounds.playHoverSound()); + serverListHostButton.setOnMouseEntered(event -> Sounds.playHoverSound()); connectButton.setOnMouseReleased(event -> { attemptToDirectConnect(); Sounds.playButtonClick(); @@ -103,8 +106,8 @@ public class ServerListController implements Initializable, ServerListenerDelega noServersFound.setText("No Servers Found"); noServersFound.setStyle( "-fx-font-size: 30px;" - + "-fx-padding:50px;" - + "-fx-text-fill: -fx-pp-dark-text-color;" + + "-fx-padding:50px;" + + "-fx-text-fill: -fx-pp-dark-text-color;" ); serverListVBox.getChildren().add(noServersFound); @@ -126,7 +129,7 @@ public class ServerListController implements Initializable, ServerListenerDelega } /** - * + * Validates the connection and attempts to connect to a given hostname and port number. */ private void attemptToDirectConnect() { if (validateDirectConnection(serverHostName.getText(), serverPortNumber.getText())) { @@ -135,10 +138,10 @@ public class ServerListController implements Initializable, ServerListenerDelega } /** - * - * @param hostName - * @param portNumber - * @return + * Checks if the hostName and portNumber are valid values to connect to. + * @param hostName host name to check. + * @param portNumber port number to check + * @return boolean value if host and port number are valid values */ private Boolean validateDirectConnection(String hostName, String portNumber) { Boolean hostNameValid = ValidationTools.validateTextField(serverHostName); @@ -148,7 +151,7 @@ public class ServerListController implements Initializable, ServerListenerDelega } /** - * + * Connects the user to a lobby via the Direct Connect form. */ private void DirectConnect() { Sounds.playButtonClick(); @@ -156,8 +159,8 @@ public class ServerListController implements Initializable, ServerListenerDelega } /** - * - * @param servers + * Refreshes the list of available servers. + * @param servers A list of ServerDescription objects showing available servers. */ private void refreshServers(List servers) { serverListVBox.getChildren().clear(); @@ -184,11 +187,6 @@ public class ServerListController implements Initializable, ServerListenerDelega } } - public void playButtonHoverSound(MouseEvent mouseEvent) { - Sounds.playHoverSound(); - } - - @Override public void serverRemoved(List servers) { Platform.runLater(() -> refreshServers(servers)); diff --git a/src/main/java/seng302/visualiser/controllers/StartScreenController.java b/src/main/java/seng302/visualiser/controllers/StartScreenController.java index 75566eb7..a03ce25c 100644 --- a/src/main/java/seng302/visualiser/controllers/StartScreenController.java +++ b/src/main/java/seng302/visualiser/controllers/StartScreenController.java @@ -5,15 +5,11 @@ import java.io.IOException; import java.net.URL; import java.util.List; import java.util.ResourceBundle; -import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; import javafx.fxml.Initializable; import javafx.scene.Node; import javafx.scene.control.Label; -import javafx.scene.effect.DropShadow; -import javafx.scene.input.MouseEvent; -import javafx.scene.paint.Color; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import seng302.gameServer.ServerDescription; @@ -34,20 +30,21 @@ public class StartScreenController implements Initializable{ private List servers; private GameClient gameClient; - /** - * - */ - private void setInitialDropShadow() { - DropShadow dropShadow = new DropShadow(); - dropShadow.setRadius(10.0); - dropShadow.setOffsetX(3.0); - dropShadow.setOffsetY(4.0); - dropShadow.setColor(Color.color(0, 0, 0, 0.5)); - headText.setEffect(dropShadow); + public void initialize(URL location, ResourceBundle resources) { + startBtn.setOnMousePressed(event -> { + startBtn.setText("LOADING..."); + Sounds.playButtonClick(); + }); + + startBtn.setOnMouseReleased(event -> goToServerBrowser()); + startBtn.setOnMouseEntered(event -> Sounds.playHoverSound()); + + preloadServerListView(); + } /** - * + * Preloads the server list view to reduce load time between start screen and server list screen. */ private void preloadServerListView(){ try { @@ -60,7 +57,7 @@ public class StartScreenController implements Initializable{ } /** - * + * Changes the view to the Server Browser. */ private void goToServerBrowser() { try { @@ -70,40 +67,4 @@ public class StartScreenController implements Initializable{ } } - public void initialize(URL location, ResourceBundle resources) { - startBtn.setOnMousePressed(event -> { - startBtn.setText("LOADING..."); - Sounds.playButtonClick(); - }); - - startBtn.setOnMouseReleased(event -> goToServerBrowser()); - - setInitialDropShadow(); - preloadServerListView(); - - } - - public void toggleMusic(ActionEvent actionEvent) { - Sounds.toggleMuteMusic(); - Sounds.playButtonClick(); - if (Sounds.isMusicMuted()) { -// muteMusicButton.setText("UnMute Music"); - } else { -// muteMusicButton.setText("Mute Music"); - } - } - - public void toggleSounds(ActionEvent actionEvent) { - Sounds.toggleMuteEffects(); - Sounds.playButtonClick(); - if (Sounds.isSoundEffectsMuted()) { -// muteSoundsButton.setText("UnMute Sounds"); - } else { -// muteSoundsButton.setText("Mute Sounds"); - } - } - - public void playButtonHoverSound(MouseEvent mouseEvent) { - Sounds.playHoverSound(); - } } diff --git a/src/main/java/seng302/visualiser/controllers/ViewManager.java b/src/main/java/seng302/visualiser/controllers/ViewManager.java index 6f153f24..f73ccfc4 100644 --- a/src/main/java/seng302/visualiser/controllers/ViewManager.java +++ b/src/main/java/seng302/visualiser/controllers/ViewManager.java @@ -105,6 +105,12 @@ public class ViewManager { }); } + /** + * Sets the decorator when a new one is created (and ideally the old one destroyed) + * Also allows injection of buttons into the decorator for custom functions. + * + * @param newDecorator The new JFXDecorator to handle the game window. + */ private void setDecorator(JFXDecorator newDecorator) { decorator = newDecorator; @@ -152,6 +158,9 @@ public class ViewManager { } + /** + * Determines if a PC has compatibility with the bonjour protocol for server detection. + */ private void checkCompatibility() { if (BonjourInstallChecker.isBonjourSupported()) { BonjourInstallChecker.openInstallUrl(); @@ -209,6 +218,11 @@ public class ViewManager { return playerList; } + /** + * Change the view to the Lobby Screen + * @param disableReadyButton Boolean value so that clients can't try start a game. + * @return A LobbyController object for the Lobby Screen. + */ public LobbyController goToLobby(Boolean disableReadyButton) { FXMLLoader loader = loadFxml("/views/LobbyView.fxml"); @@ -226,6 +240,11 @@ public class ViewManager { return loader.getController(); } + /** + * Sets up the view for the race. Creating a new decorator and destroying the old one. + * @return A RaceViewController for the race view screen. + */ + public RaceViewController loadRaceView() { FXMLLoader loader = loadFxml("/views/RaceView.fxml"); @@ -277,6 +296,7 @@ public class ViewManager { return loader.getController(); } + // TODO: 12/09/17 ajm412: Why is this here? is there no better way we can do this? Ideally inside the LobbyController. public JFXDialog loadCustomizationDialog(StackPane parent, LobbyController lobbyController, Color playerColor, String name) { FXMLLoader dialog = loadFxml("/views/dialogs/BoatCustomizeDialog.fxml"); diff --git a/src/main/java/seng302/visualiser/controllers/cells/PlayerCell.java b/src/main/java/seng302/visualiser/controllers/cells/PlayerCell.java index c960afa9..6fb35708 100644 --- a/src/main/java/seng302/visualiser/controllers/cells/PlayerCell.java +++ b/src/main/java/seng302/visualiser/controllers/cells/PlayerCell.java @@ -3,11 +3,9 @@ package seng302.visualiser.controllers.cells; import javafx.fxml.FXML; import javafx.scene.Group; import javafx.scene.control.Label; -import javafx.scene.input.MouseEvent; import javafx.scene.layout.GridPane; import javafx.scene.layout.Pane; import javafx.scene.paint.Color; -import seng302.utilities.Sounds; import seng302.visualiser.fxObjects.assets_3D.BoatMeshType; import seng302.visualiser.fxObjects.assets_3D.BoatModel; import seng302.visualiser.fxObjects.assets_3D.ModelFactory; @@ -34,12 +32,13 @@ public class PlayerCell { } public void initialize() { + // Set Player Name playerName.setText(name); + // 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); group.getChildren().add(bo.getAssets()); - } public Integer getPlayerId() { @@ -53,8 +52,4 @@ public class PlayerCell { public Color getBoatColor() { return boatColor; } - - public void playButtonHoverSound(MouseEvent mouseEvent) { - Sounds.playHoverSound(); - } -} \ No newline at end of file +} diff --git a/src/main/java/seng302/visualiser/controllers/cells/ServerCell.java b/src/main/java/seng302/visualiser/controllers/cells/ServerCell.java index e2e7b5d6..a2ec84ee 100644 --- a/src/main/java/seng302/visualiser/controllers/cells/ServerCell.java +++ b/src/main/java/seng302/visualiser/controllers/cells/ServerCell.java @@ -1,27 +1,15 @@ package seng302.visualiser.controllers.cells; import com.jfoenix.controls.JFXButton; -import com.jfoenix.controls.JFXDecorator; -import com.sun.org.apache.bcel.internal.classfile.Unknown; -import java.io.IOException; -import java.net.InetAddress; import java.net.URL; -import java.net.UnknownHostException; import java.util.ResourceBundle; - -import com.jfoenix.controls.JFXTextField; import javafx.fxml.FXML; -import javafx.fxml.FXMLLoader; import javafx.fxml.Initializable; -import javafx.scene.Parent; import javafx.scene.control.Label; -import javafx.scene.effect.DropShadow; -import javafx.scene.input.MouseEvent; import javafx.scene.layout.GridPane; -import javafx.scene.paint.Color; +import javafx.scene.layout.VBox; import seng302.gameServer.ServerDescription; import seng302.utilities.Sounds; -import seng302.visualiser.GameClient; import seng302.visualiser.controllers.ViewManager; public class ServerCell implements Initializable { @@ -29,6 +17,8 @@ public class ServerCell implements Initializable { //--------FXML BEGIN--------// //Layout @FXML + private VBox serverCellVBox; + @FXML private GridPane serverListCell; //Server Information @FXML @@ -66,21 +56,21 @@ public class ServerCell implements Initializable { serverPlayerCount.setText(currPlayerCount); mapName.setText(mapNameString); + serverCellVBox.setOnMouseEntered(event -> Sounds.playHoverSound()); + serverConnButton.setOnMouseReleased(event -> { Sounds.playButtonClick(); joinServer(); }); + } /** - * + * Attempts to connect to the chosen server using the button on the serverCell. */ private void joinServer() { System.out.println("Connecting to " + serverName.getText()); ViewManager.getInstance().getGameClient().runAsClient(hostName, portNumber); } - public void playButtonHoverSound(MouseEvent mouseEvent) { - Sounds.playHoverSound(); - } } diff --git a/src/main/java/seng302/visualiser/controllers/dialogs/BoatCustomizeController.java b/src/main/java/seng302/visualiser/controllers/dialogs/BoatCustomizeController.java index 206acb56..966fab68 100644 --- a/src/main/java/seng302/visualiser/controllers/dialogs/BoatCustomizeController.java +++ b/src/main/java/seng302/visualiser/controllers/dialogs/BoatCustomizeController.java @@ -4,17 +4,15 @@ import com.jfoenix.controls.JFXButton; import com.jfoenix.controls.JFXColorPicker; 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.scene.paint.Color; -import javafx.stage.Stage; import seng302.gameServer.messages.CustomizeRequestType; import seng302.utilities.Sounds; import seng302.visualiser.ClientToServerThread; - -import java.net.URL; -import java.util.ResourceBundle; import seng302.visualiser.controllers.LobbyController; import seng302.visualiser.validators.FieldLengthValidator; import seng302.visualiser.validators.ValidationTools; @@ -56,7 +54,7 @@ public class BoatCustomizeController implements Initializable{ } /** - * + * Attempts to submit a valid customization packet for boat name and boat color. */ private void submitCustomization() { diff --git a/src/main/java/seng302/visualiser/controllers/dialogs/ServerCreationController.java b/src/main/java/seng302/visualiser/controllers/dialogs/ServerCreationController.java index 473ac8f4..ffa64356 100644 --- a/src/main/java/seng302/visualiser/controllers/dialogs/ServerCreationController.java +++ b/src/main/java/seng302/visualiser/controllers/dialogs/ServerCreationController.java @@ -4,6 +4,8 @@ import com.jfoenix.controls.JFXButton; import com.jfoenix.controls.JFXSlider; import com.jfoenix.controls.JFXTextField; import com.jfoenix.validation.RequiredFieldValidator; +import java.net.URL; +import java.util.ResourceBundle; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.control.Label; @@ -12,9 +14,6 @@ import seng302.gameServer.ServerDescription; import seng302.utilities.Sounds; import seng302.visualiser.controllers.ViewManager; import seng302.visualiser.validators.FieldLengthValidator; - -import java.net.URL; -import java.util.ResourceBundle; import seng302.visualiser.validators.ValidationTools; public class ServerCreationController implements Initializable { @@ -51,7 +50,7 @@ public class ServerCreationController implements Initializable { } /** - * + * Validates that a server has a valid name and creates the server. */ private void validateServerSettings() { submitBtn.setText("CREATING..."); @@ -63,7 +62,7 @@ public class ServerCreationController implements Initializable { } /** - * + * Creates a server with a given set of details. */ private void createServer() { ServerDescription serverDescription = ViewManager.getInstance().getGameClient() @@ -75,7 +74,7 @@ public class ServerCreationController implements Initializable { } /** - * + * Updates a label as the user slides along the max players slider. */ private void updateMaxPlayerLabel() { maxPlayersSlider.setValue(Math.floor(maxPlayersSlider.getValue())); diff --git a/src/main/resources/css/Master.css b/src/main/resources/css/Master.css index 5f73543e..8636a88a 100644 --- a/src/main/resources/css/Master.css +++ b/src/main/resources/css/Master.css @@ -13,6 +13,7 @@ -fx-pp-dropshadow-light: dropshadow(gaussian, rgba(0, 0, 0, 0.1), 10.0, 0.2, 3, 4); -fx-pp-dropshadow-dark: dropshadow(gaussian, rgba(0, 0, 0, 0.3), 10.0, 0.2, 5, 6); + -fx-pp-dropshadow-headers: dropshadow(gaussian, rgba(0, 0, 0, 0.5), 10.0, 0.2, 3, 4); } /*GridPane .jfx-button {*/ diff --git a/src/main/resources/css/StartScreenView.css b/src/main/resources/css/StartScreenView.css index 0dda6f19..04338028 100644 --- a/src/main/resources/css/StartScreenView.css +++ b/src/main/resources/css/StartScreenView.css @@ -22,4 +22,5 @@ -fx-background-color: transparent; -fx-font-size: 80px; -fx-text-fill: -fx-pp-light-text-color; + -fx-effect: -fx-pp-dropshadow-headers; } \ No newline at end of file diff --git a/src/main/resources/views/ServerListView.fxml b/src/main/resources/views/ServerListView.fxml index b75a4a54..928aa025 100644 --- a/src/main/resources/views/ServerListView.fxml +++ b/src/main/resources/views/ServerListView.fxml @@ -18,7 +18,10 @@ - + @@ -74,7 +77,7 @@ diff --git a/src/main/resources/views/StartScreenView.fxml b/src/main/resources/views/StartScreenView.fxml index a8baaec7..a7820821 100644 --- a/src/main/resources/views/StartScreenView.fxml +++ b/src/main/resources/views/StartScreenView.fxml @@ -26,7 +26,8 @@ - + diff --git a/src/main/resources/views/cells/ServerCell.fxml b/src/main/resources/views/cells/ServerCell.fxml index c25fcb9c..17a16beb 100644 --- a/src/main/resources/views/cells/ServerCell.fxml +++ b/src/main/resources/views/cells/ServerCell.fxml @@ -9,7 +9,9 @@ - + From 17b086481549f84306c122fbddb509260b46514c Mon Sep 17 00:00:00 2001 From: Calum Date: Tue, 12 Sep 2017 17:03:50 +1200 Subject: [PATCH 2/9] Moved transformation of boat icon view from controller class to model factory class. #implement #story[1266] #refactor --- src/main/java/seng302/App.java | 14 +++---- .../controllers/RaceViewController.java | 1 - .../visualiser/controllers/ViewManager.java | 3 +- .../visualiser/fxObjects/assets_3D/Model.java | 8 +++- .../fxObjects/assets_3D/ModelFactory.java | 42 ++++++++++--------- 5 files changed, 37 insertions(+), 31 deletions(-) diff --git a/src/main/java/seng302/App.java b/src/main/java/seng302/App.java index a224160e..3c654f77 100644 --- a/src/main/java/seng302/App.java +++ b/src/main/java/seng302/App.java @@ -1,20 +1,16 @@ package seng302; import ch.qos.logback.classic.Level; -import com.jfoenix.controls.JFXDecorator; import javafx.application.Application; -import javafx.fxml.FXMLLoader; -import javafx.scene.Parent; -import javafx.scene.Scene; -import javafx.scene.image.Image; import javafx.stage.Stage; -import org.apache.commons.cli.*; +import org.apache.commons.cli.CommandLine; +import org.apache.commons.cli.CommandLineParser; +import org.apache.commons.cli.DefaultParser; +import org.apache.commons.cli.Options; +import org.apache.commons.cli.ParseException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import seng302.visualiser.controllers.ViewManager; -import seng302.gameServer.ServerAdvertiser; - -import java.io.IOException; public class App extends Application { diff --git a/src/main/java/seng302/visualiser/controllers/RaceViewController.java b/src/main/java/seng302/visualiser/controllers/RaceViewController.java index 24107453..f389ffeb 100644 --- a/src/main/java/seng302/visualiser/controllers/RaceViewController.java +++ b/src/main/java/seng302/visualiser/controllers/RaceViewController.java @@ -715,7 +715,6 @@ public class RaceViewController extends Thread implements ImportantAnnotationDel } public void updateRaceData (RaceXMLData raceData) { - gameView.updateBorder(raceData.getCourseLimit()); gameView.updateTokens(raceData.getTokens()); } diff --git a/src/main/java/seng302/visualiser/controllers/ViewManager.java b/src/main/java/seng302/visualiser/controllers/ViewManager.java index 6f153f24..e3aeb68d 100644 --- a/src/main/java/seng302/visualiser/controllers/ViewManager.java +++ b/src/main/java/seng302/visualiser/controllers/ViewManager.java @@ -13,6 +13,7 @@ import javafx.scene.Cursor; import javafx.scene.Node; import javafx.scene.Parent; import javafx.scene.Scene; +import javafx.scene.SceneAntialiasing; import javafx.scene.image.Image; import javafx.scene.layout.HBox; import javafx.scene.layout.StackPane; @@ -78,7 +79,7 @@ public class ViewManager { gameClient = new GameClient(decorator); stage.getIcons().add(new Image(getClass().getResourceAsStream("/PP.png"))); - Scene scene = new Scene(decorator, 1200, 800); + Scene scene = new Scene(decorator, 1200, 800, false, SceneAntialiasing.BALANCED); stage.setMinHeight(800); stage.setMinWidth(1200); stage.setScene(scene); diff --git a/src/main/java/seng302/visualiser/fxObjects/assets_3D/Model.java b/src/main/java/seng302/visualiser/fxObjects/assets_3D/Model.java index 25b86626..6d5da2e0 100644 --- a/src/main/java/seng302/visualiser/fxObjects/assets_3D/Model.java +++ b/src/main/java/seng302/visualiser/fxObjects/assets_3D/Model.java @@ -4,7 +4,7 @@ import javafx.animation.AnimationTimer; import javafx.scene.Group; /** - * Created by CJIRWIN on 7/09/2017. + * Class for generic imported 3D model. Animation terminates on if removed from scene. */ public class Model { @@ -16,6 +16,12 @@ public class Model { this.animationTimer = animation; if (animation != null) { animation.start(); + assets.sceneProperty().addListener((obs, oldVal, newVal) -> { + if (newVal == null) { + animationTimer.stop(); + animationTimer = null; + } + }); } } 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 a95d458f..a94cca01 100644 --- a/src/main/java/seng302/visualiser/fxObjects/assets_3D/ModelFactory.java +++ b/src/main/java/seng302/visualiser/fxObjects/assets_3D/ModelFactory.java @@ -2,7 +2,6 @@ package seng302.visualiser.fxObjects.assets_3D; import com.interactivemesh.jfx.importer.col.ColModelImporter; import com.interactivemesh.jfx.importer.stl.StlMeshImporter; -import java.util.Random; import javafx.animation.AnimationTimer; import javafx.geometry.Point3D; import javafx.scene.AmbientLight; @@ -15,6 +14,8 @@ import javafx.scene.transform.Rotate; import javafx.scene.transform.Scale; import javafx.scene.transform.Translate; + + /** * Factory class for creating 3D models of boats. */ @@ -22,29 +23,30 @@ public class ModelFactory { public static BoatModel boatIconView(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(10, 10, 10), - new Rotate(45, new Point3D(0,0,1)), - new Rotate(90, new Point3D(0, 1, 0)), - new Rotate(270, new Point3D(1, 0, 0)), - new Translate(12, 14, 0) + new Scale(3.3, 3.3, 3.3), + new Rotate(-70, new Point3D(1,0,0)), + new Translate(13,50, 0), + animationRotate ); + boatAssets.getTransforms().add(animationRotate); BoatModel bo = new BoatModel(boatAssets, null, boatType); - bo.showSail(); bo.rotateSail(45); - bo.setAnimation(new AnimationTimer() { - Group group = bo.getAssets(); - double boatAngle = 0; - int id = new Random().nextInt(); + bo.setAnimation(new AnimationTimer() { + double boatAngle = 0; + Rotate rotate = animationRotate; @Override public void handle(long now) { - ((Rotate) group.getTransforms().get(3)).setAngle(boatAngle++); - System.out.println("animating a thingy " + id); + boatAngle += 0.5; + rotate.setAngle(boatAngle); } }); - boatAssets.getChildren().add(new AmbientLight(new Color(1, 1, 1, 0.01))); + boatAssets.getChildren().addAll( + new AmbientLight() + ); return bo; } @@ -53,19 +55,21 @@ public class ModelFactory { boatAssets.getTransforms().addAll( new Scale(40, 40, 40), new Rotate(90, new Point3D(0,0,1)), - new Rotate(90, new Point3D(0, 1, 0)), - new Rotate(0, new Point3D(1,1,1)) + new Rotate(90, new Point3D(0, 1, 0)) ); - // TODO: 7/09/17 This seems like it will never be garbage claimed. Might have to call BoatModel.stopAnimation(); + + final Rotate animationRotate = new Rotate(0, new Point3D(1,1,1)); + boatAssets.getTransforms().add(animationRotate); + return new BoatModel(boatAssets, new AnimationTimer() { private double rotation = 0; - private final Group group = boatAssets; + private Rotate rotate = animationRotate; @Override public void handle(long now) { rotation += 0.5; - ((Rotate) group.getTransforms().get(3)).setAngle(rotation); + rotate.setAngle(rotation); } }, boatType); } From 9cba76f979f120e59c34ad4ca952b01799fd4db6 Mon Sep 17 00:00:00 2001 From: Michael Rausch Date: Tue, 12 Sep 2017 17:17:16 +1200 Subject: [PATCH 3/9] Fixed maven source encoding --- pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/pom.xml b/pom.xml index c2b04417..dae68ecb 100644 --- a/pom.xml +++ b/pom.xml @@ -11,6 +11,7 @@ 1.8 1.8 + UTF-8 From e375efb8e92ffac2016479fa33582f4b1e056b12 Mon Sep 17 00:00:00 2001 From: Alistair McIntyre Date: Tue, 12 Sep 2017 17:19:18 +1200 Subject: [PATCH 4/9] - Added documentation to controllers - Moved Customization Dialog logic into LobbyController tags : #story[1245] --- .../controllers/LobbyController.java | 27 +++++++++++++++-- .../visualiser/controllers/ViewManager.java | 29 ------------------- .../dialogs/BoatCustomizeController.java | 9 +++--- 3 files changed, 30 insertions(+), 35 deletions(-) diff --git a/src/main/java/seng302/visualiser/controllers/LobbyController.java b/src/main/java/seng302/visualiser/controllers/LobbyController.java index 19b919a1..5fe2d0e1 100644 --- a/src/main/java/seng302/visualiser/controllers/LobbyController.java +++ b/src/main/java/seng302/visualiser/controllers/LobbyController.java @@ -31,6 +31,7 @@ import seng302.model.stream.xml.parser.RaceXMLData; import seng302.utilities.Sounds; import seng302.visualiser.GameView; import seng302.visualiser.controllers.cells.PlayerCell; +import seng302.visualiser.controllers.dialogs.BoatCustomizeController; public class LobbyController implements Initializable { @@ -93,8 +94,8 @@ public class LobbyController implements Initializable { Integer playerId = ViewManager.getInstance().getGameClient().getServerThread().getClientId(); String name = ViewManager.getInstance().getGameClient().getPlayerNames().get(playerId - 1); - Color playerColor = Colors.getColor( playerId - 1); - customizationDialog = ViewManager.getInstance().loadCustomizationDialog(serverListMainStackPane, this, playerColor, name); + playersColor = Colors.getColor(playerId - 1); + customizationDialog = createCustomizeDialog(); customizeButton.setOnMouseReleased(event -> { Sounds.playButtonClick(); @@ -109,6 +110,28 @@ public class LobbyController implements Initializable { initMapPreview(); } + private JFXDialog createCustomizeDialog() { + // TODO: 12/09/17 ajm412: Why is this here? is there no better way we can do this? Ideally inside the LobbyController. + FXMLLoader dialog = new FXMLLoader( + getClass().getResource("/views/dialogs/BoatCustomizeDialog.fxml")); + + JFXDialog customizationDialog = null; + + try { + customizationDialog = new JFXDialog(serverListMainStackPane, dialog.load(), + JFXDialog.DialogTransition.CENTER); + + } catch (IOException e) { + e.printStackTrace(); + } + + BoatCustomizeController controller = dialog.getController(); + + controller.setParentController(this); + + return customizationDialog; + } + /** * */ diff --git a/src/main/java/seng302/visualiser/controllers/ViewManager.java b/src/main/java/seng302/visualiser/controllers/ViewManager.java index e63999d7..c974a035 100644 --- a/src/main/java/seng302/visualiser/controllers/ViewManager.java +++ b/src/main/java/seng302/visualiser/controllers/ViewManager.java @@ -2,7 +2,6 @@ package seng302.visualiser.controllers; import com.jfoenix.controls.JFXButton; import com.jfoenix.controls.JFXDecorator; -import com.jfoenix.controls.JFXDialog; import com.jfoenix.svg.SVGGlyph; import java.io.IOException; import java.util.HashMap; @@ -16,7 +15,6 @@ import javafx.scene.Scene; import javafx.scene.SceneAntialiasing; import javafx.scene.image.Image; import javafx.scene.layout.HBox; -import javafx.scene.layout.StackPane; import javafx.scene.paint.Color; import javafx.stage.Stage; import org.slf4j.Logger; @@ -25,7 +23,6 @@ import seng302.gameServer.ServerAdvertiser; import seng302.utilities.BonjourInstallChecker; import seng302.utilities.Sounds; import seng302.visualiser.GameClient; -import seng302.visualiser.controllers.dialogs.BoatCustomizeController; public class ViewManager { @@ -296,30 +293,4 @@ public class ViewManager { return loader.getController(); } - - // TODO: 12/09/17 ajm412: Why is this here? is there no better way we can do this? Ideally inside the LobbyController. - public JFXDialog loadCustomizationDialog(StackPane parent, LobbyController lobbyController, - Color playerColor, String name) { - FXMLLoader dialog = loadFxml("/views/dialogs/BoatCustomizeDialog.fxml"); - - JFXDialog customizationDialog = null; - - try { - customizationDialog = new JFXDialog(parent, dialog.load(), - JFXDialog.DialogTransition.CENTER); - - } catch (IOException e) { - e.printStackTrace(); - } - - BoatCustomizeController controller = dialog.getController(); - - controller.setParentController(lobbyController); - controller.setPlayerColor(playerColor); - controller.setPlayerName(name); - controller.setServerThread(gameClient.getServerThread()); - controller.setPlayerColor(lobbyController.playersColor); - - 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 966fab68..c59f672a 100644 --- a/src/main/java/seng302/visualiser/controllers/dialogs/BoatCustomizeController.java +++ b/src/main/java/seng302/visualiser/controllers/dialogs/BoatCustomizeController.java @@ -14,6 +14,7 @@ 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.validators.FieldLengthValidator; import seng302.visualiser.validators.ValidationTools; @@ -42,6 +43,10 @@ public class BoatCustomizeController implements Initializable{ submitCustomization(); }); + setPlayerColor(lobbyController.playersColor); + + socketThread = ViewManager.getInstance().getGameClient().getServerThread(); + RequiredFieldValidator playerNameReqValidator = new RequiredFieldValidator(); playerNameReqValidator.setMessage("Player name required."); @@ -86,10 +91,6 @@ public class BoatCustomizeController implements Initializable{ this.colorPicker.setValue(playerColor); } - public void setServerThread(ClientToServerThread ctsThread) { - this.socketThread = ctsThread; - } - public void setParentController(LobbyController lobbyController){ this.lobbyController = lobbyController; } From 20b656b16d850fbc1a90e754c208dc8555d66807 Mon Sep 17 00:00:00 2001 From: Alistair McIntyre Date: Tue, 12 Sep 2017 17:26:52 +1200 Subject: [PATCH 5/9] - Fixed a bug in new customize dialog. - Chat should work correctly when pressing enter now. tags : #story[1245] --- .../java/seng302/visualiser/controllers/LobbyController.java | 1 + .../seng302/visualiser/controllers/RaceViewController.java | 3 +-- .../controllers/dialogs/BoatCustomizeController.java | 2 -- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/main/java/seng302/visualiser/controllers/LobbyController.java b/src/main/java/seng302/visualiser/controllers/LobbyController.java index 5fe2d0e1..e0d7d3ab 100644 --- a/src/main/java/seng302/visualiser/controllers/LobbyController.java +++ b/src/main/java/seng302/visualiser/controllers/LobbyController.java @@ -128,6 +128,7 @@ public class LobbyController implements Initializable { BoatCustomizeController controller = dialog.getController(); controller.setParentController(this); + controller.setPlayerColor(this.playersColor); return customizationDialog; } diff --git a/src/main/java/seng302/visualiser/controllers/RaceViewController.java b/src/main/java/seng302/visualiser/controllers/RaceViewController.java index 452b5823..87235ca7 100644 --- a/src/main/java/seng302/visualiser/controllers/RaceViewController.java +++ b/src/main/java/seng302/visualiser/controllers/RaceViewController.java @@ -727,8 +727,7 @@ public class RaceViewController extends Thread implements ImportantAnnotationDel } public boolean isChatInputFocused() { -// return chatInput.focusedProperty().getValue(); - return false; + return chatInput.focusedProperty().getValue(); } public String readChatInput() { diff --git a/src/main/java/seng302/visualiser/controllers/dialogs/BoatCustomizeController.java b/src/main/java/seng302/visualiser/controllers/dialogs/BoatCustomizeController.java index c59f672a..16afa1e9 100644 --- a/src/main/java/seng302/visualiser/controllers/dialogs/BoatCustomizeController.java +++ b/src/main/java/seng302/visualiser/controllers/dialogs/BoatCustomizeController.java @@ -43,8 +43,6 @@ public class BoatCustomizeController implements Initializable{ submitCustomization(); }); - setPlayerColor(lobbyController.playersColor); - socketThread = ViewManager.getInstance().getGameClient().getServerThread(); RequiredFieldValidator playerNameReqValidator = new RequiredFieldValidator(); From 167545cbefa5eba10e935a1e18f84eab57c38f45 Mon Sep 17 00:00:00 2001 From: Alistair McIntyre Date: Tue, 12 Sep 2017 17:45:39 +1200 Subject: [PATCH 6/9] - Deleted old controllers that didn't do anything anymore. tags : #story[1245] --- .../java/seng302/visualiser/GameClient.java | 18 -- .../CustomizationController_old.java | 76 ------ .../controllers/LobbyController.java | 2 +- .../controllers/LobbyController_old.java | 249 ------------------ src/main/resources/views/customizeView.fxml | 46 ---- 5 files changed, 1 insertion(+), 390 deletions(-) delete mode 100644 src/main/java/seng302/visualiser/controllers/CustomizationController_old.java delete mode 100644 src/main/java/seng302/visualiser/controllers/LobbyController_old.java delete mode 100644 src/main/resources/views/customizeView.fxml diff --git a/src/main/java/seng302/visualiser/GameClient.java b/src/main/java/seng302/visualiser/GameClient.java index 32f65871..39f2df17 100644 --- a/src/main/java/seng302/visualiser/GameClient.java +++ b/src/main/java/seng302/visualiser/GameClient.java @@ -44,7 +44,6 @@ import seng302.utilities.XMLGenerator; import seng302.utilities.XMLParser; import seng302.visualiser.controllers.FinishScreenViewController; import seng302.visualiser.controllers.LobbyController; -import seng302.visualiser.controllers.LobbyController_old; import seng302.visualiser.controllers.RaceViewController; import seng302.visualiser.controllers.ViewManager; @@ -201,23 +200,6 @@ public class GameClient { socketThread.addStreamObserver(this::parsePackets); } - /** - * Loads a view of the lobby into the clients pane - * - * @return the lobby controller. - */ - private LobbyController_old loadLobby() { - FXMLLoader fxmlLoader = new FXMLLoader( - GameClient.class.getResource("/views/LobbyView.fxml")); - try { - holderPane.getChildren().clear(); - holderPane.getChildren().add(fxmlLoader.load()); - } catch (IOException e) { - e.printStackTrace(); - } - return fxmlLoader.getController(); - } - private void loadRaceView() { FXMLLoader fxmlLoader = loadFXMLToHolder("/views/RaceView.fxml"); holderPane.getScene().setOnKeyPressed(this::keyPressed); diff --git a/src/main/java/seng302/visualiser/controllers/CustomizationController_old.java b/src/main/java/seng302/visualiser/controllers/CustomizationController_old.java deleted file mode 100644 index b8f0b146..00000000 --- a/src/main/java/seng302/visualiser/controllers/CustomizationController_old.java +++ /dev/null @@ -1,76 +0,0 @@ -package seng302.visualiser.controllers; - -import javafx.fxml.FXML; -import javafx.scene.control.Button; -import javafx.scene.control.ColorPicker; -import javafx.scene.control.TextField; -import javafx.scene.paint.Color; -import javafx.stage.Stage; -import seng302.gameServer.messages.CustomizeRequestType; -import seng302.utilities.Sounds; -import seng302.visualiser.ClientToServerThread; - -public class CustomizationController_old { - - @FXML - private TextField nameField; - - @FXML - private ColorPicker boatColorPicker; - - @FXML - private Button customizeSubmit; - - private LobbyController_old lc; - private ClientToServerThread socketThread; - private Stage windowStage; - - public void initialize() { - - } - - public void setServerThread(ClientToServerThread ctsThread) { - this.socketThread = ctsThread; - } - - @FXML - public void submitCustomization() { - Sounds.playButtonClick(); -// System.out.println("Attempting to send"); - socketThread.sendCustomizationRequest(CustomizeRequestType.NAME, nameField.getText().getBytes()); - // TODO: 16/08/17 ajm412: Turn colors into byte array. - Color color = boatColorPicker.getValue(); - - short red = (short) (color.getRed() * 255); - short green = (short) (color.getGreen() * 255); - short blue = (short) (color.getBlue() * 255); - - byte[] colorArray = new byte[3]; - - colorArray[0] = (byte) red; - colorArray[1] = (byte) green; - colorArray[2] = (byte) blue; - - socketThread.sendCustomizationRequest(CustomizeRequestType.COLOR, colorArray); - lc.setPlayersColor(color); - windowStage.close(); - } - - public void setLobbyController(LobbyController_old lc) { - this.lc = lc; - } - - public void setStage(Stage stage) { - this.windowStage = stage; - } - - public void setPlayerName(String name) { - this.nameField.setText(name); - } - - public void setPlayerColor(Color playerColor) { - this.boatColorPicker.setValue(playerColor); - } - - -} diff --git a/src/main/java/seng302/visualiser/controllers/LobbyController.java b/src/main/java/seng302/visualiser/controllers/LobbyController.java index e0d7d3ab..9beb14f5 100644 --- a/src/main/java/seng302/visualiser/controllers/LobbyController.java +++ b/src/main/java/seng302/visualiser/controllers/LobbyController.java @@ -52,7 +52,6 @@ public class LobbyController implements Initializable { private Pane serverMap; //---------FXML END---------// - private List lobbyListeners = new ArrayList<>(); private RaceState raceState; private JFXDialog customizationDialog; public Color playersColor; @@ -216,6 +215,7 @@ public class LobbyController implements Initializable { } private void leaveLobby() { + ViewManager.getInstance().getGameClient().stopGame(); ViewManager.getInstance().goToStartView(); } diff --git a/src/main/java/seng302/visualiser/controllers/LobbyController_old.java b/src/main/java/seng302/visualiser/controllers/LobbyController_old.java deleted file mode 100644 index 20f16801..00000000 --- a/src/main/java/seng302/visualiser/controllers/LobbyController_old.java +++ /dev/null @@ -1,249 +0,0 @@ -package seng302.visualiser.controllers; - -import com.sun.media.jfxmedia.logging.Logger; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import javafx.application.Platform; -import javafx.collections.ListChangeListener; -import javafx.collections.ObservableList; -import javafx.fxml.FXML; -import javafx.fxml.FXMLLoader; -import javafx.scene.Parent; -import javafx.scene.Scene; -import javafx.scene.control.Button; -import javafx.scene.control.TextArea; -import javafx.scene.image.Image; -import javafx.scene.image.ImageView; -import javafx.scene.paint.Color; -import javafx.scene.text.Text; -import javafx.stage.Stage; -import seng302.gameServer.GameStages; -import seng302.gameServer.GameState; -import seng302.model.Colors; -import seng302.model.RaceState; -import seng302.visualiser.ClientToServerThread; - -/** - * A class describing the actions of the lobby screen - * Created by wmu16 on 10/07/17. - */ -public class LobbyController_old { - - public enum CloseStatus { - LEAVE, - READY - } - - @FunctionalInterface - public interface LobbyCloseListener { - void notify(CloseStatus exitCause); - } - - @FXML - private Text lobbyIpText; - @FXML - private Button readyButton; - @FXML - private Button customizeButton; - @FXML - private TextArea playerOneTxt; - @FXML - private TextArea playerTwoTxt; - @FXML - private TextArea playerThreeTxt; - @FXML - private TextArea playerFourTxt; - @FXML - private TextArea playerFiveTxt; - @FXML - private TextArea playerSixTxt; - @FXML - private TextArea playerSevenTxt; - @FXML - private TextArea playerEightTxt; - @FXML - private ImageView firstImageView; - @FXML - private ImageView secondImageView; - @FXML - private ImageView thirdImageView; - @FXML - private ImageView fourthImageView; - @FXML - private ImageView fifthImageView; - @FXML - private ImageView sixthImageView; - @FXML - private ImageView seventhImageView; - @FXML - private ImageView eighthImageView; - @FXML - private Text timeUntilStart; - @FXML - private Text courseNameText; - - private List imageViews = new ArrayList<>(); - private List