diff --git a/src/main/java/seng302/visualiser/controllers/LobbyController.java b/src/main/java/seng302/visualiser/controllers/LobbyController.java index 45b2357f..cfb8bf27 100644 --- a/src/main/java/seng302/visualiser/controllers/LobbyController.java +++ b/src/main/java/seng302/visualiser/controllers/LobbyController.java @@ -6,11 +6,13 @@ import java.io.IOException; import java.net.URL; import java.util.ArrayList; import java.util.Arrays; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.ResourceBundle; import javafx.application.Platform; import javafx.collections.ListChangeListener; +import javafx.event.EventHandler; import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; import javafx.fxml.Initializable; @@ -18,6 +20,7 @@ import javafx.geometry.Point3D; import javafx.scene.Group; import javafx.scene.control.Label; import javafx.scene.control.ScrollPane; +import javafx.scene.input.MouseEvent; import javafx.scene.layout.AnchorPane; import javafx.scene.layout.Pane; import javafx.scene.layout.StackPane; @@ -40,6 +43,8 @@ import seng302.utilities.Sounds; import seng302.visualiser.MapPreview; import seng302.visualiser.controllers.cells.PlayerCell; import seng302.visualiser.controllers.dialogs.BoatCustomizeController; +import seng302.visualiser.controllers.dialogs.PopupDialogController; +import seng302.visualiser.controllers.dialogs.TokenInfoDialogController; import seng302.visualiser.fxObjects.assets_3D.ModelFactory; import seng302.visualiser.fxObjects.assets_3D.ModelType; @@ -71,6 +76,7 @@ public class LobbyController implements Initializable { private RaceState raceState; private JFXDialog customizationDialog; + private JFXDialog tokenInfoDialog; public Color playersColor; private Map playerBoats; private Double mapWidth = INITIAL_MAP_WIDTH, mapHeight = INITIAL_MAP_HEIGHT; @@ -141,19 +147,46 @@ public class LobbyController implements Initializable { initTokenPreviews(); } + + /** + * Initialises the tokens in the side panel + */ private void initTokenPreviews() { Group speedToken = ModelFactory.importModel(ModelType.VELOCITY_PICKUP).getAssets(); Group handlingToken = ModelFactory.importModel(ModelType.HANDLING_PICKUP).getAssets(); Group windWalkerToken = ModelFactory.importModel(ModelType.WIND_WALKER_PICKUP).getAssets(); Group bumperToken = ModelFactory.importModel(ModelType.BUMPER_PICKUP).getAssets(); Group randomToken = ModelFactory.importModel(ModelType.RANDOM_PICKUP).getAssets(); - List tokensPreviews = new ArrayList<>( - Arrays.asList(speedToken, handlingToken, windWalkerToken, bumperToken, randomToken)); - tokensPreviews.forEach((tokenPreview) -> { - tokenPreview.getTransforms().addAll( + HashMap tokenPanes = new HashMap<>(); + tokenPanes.put(speedTokenPane, speedToken); + tokenPanes.put(handlingTokenPane, handlingToken); + tokenPanes.put(windWalkerTokenPane, windWalkerToken); + tokenPanes.put(bumperTokenPane, bumperToken); + tokenPanes.put(randomTokenPane, randomToken); + + Scale hoverScale = new Scale(1.2, 1.2, 1.2); + + tokenPanes.entrySet().forEach((entry) -> { + Pane thisPane = entry.getKey(); + Group thisToken = entry.getValue(); + + thisToken.getTransforms().addAll( new Translate(40, 50, 0), new Scale(13, 13, 13)); + + thisPane.setOnMouseEntered(event -> { + thisToken.getTransforms().add(hoverScale); + }); + thisPane.setOnMouseExited(event -> { + thisToken.getTransforms().remove(hoverScale); + }); + thisPane.setOnMouseReleased(event -> { + tokenInfoDialog = makeTokenDialog(thisPane); + tokenInfoDialog.show(); + }); + + thisPane.getChildren().add(thisToken); }); //Hacky rotations for wind and random to level it in the plane @@ -165,13 +198,53 @@ public class LobbyController implements Initializable { new Rotate(-90, new Point3D(1, 0, 0)), new Translate(0, 0,1) ); + } - speedTokenPane.getChildren().add(speedToken); - handlingTokenPane.getChildren().add(handlingToken); - windWalkerTokenPane.getChildren().add(windWalkerToken); - bumperTokenPane.getChildren().add(bumperToken); - randomTokenPane.getChildren().add(randomToken); + private JFXDialog makeTokenDialog(Pane inducingPane) { + String header = "..."; + String body = "Nothing to see here"; + Group token = new Group(); + if (inducingPane == speedTokenPane) { + header = "Speed Boost"; + body = "Increases your max velocity"; + token = ModelFactory.importModel(ModelType.VELOCITY_PICKUP).getAssets(); + } else if (inducingPane == handlingTokenPane) { + header = "Handling Boost"; + body = "Increases your turing rate"; + token = ModelFactory.importModel(ModelType.HANDLING_PICKUP).getAssets(); + } else if (inducingPane == windWalkerTokenPane) { + header = "Wind Walker"; + body = "The wind now rotates with you, giving you your optimal speed in all directions"; + token = ModelFactory.importModel(ModelType.WIND_WALKER_PICKUP).getAssets(); + } else if (inducingPane == bumperTokenPane) { + header = "Bumper"; + body = "While this is active, upon hitting another boat, you will power it down for a short time"; + token = ModelFactory.importModel(ModelType.BUMPER_PICKUP).getAssets(); + } else if (inducingPane == randomTokenPane) { + header = "Random"; + body = "A 50% chance of becoming any other token and a 50% chance of slowing your boat for a time"; + token = ModelFactory.importModel(ModelType.RANDOM_PICKUP).getAssets(); + } + + FXMLLoader dialog = new FXMLLoader( + getClass().getResource("/views/dialogs/TokenInfoDialog.fxml")); + + JFXDialog tokenInfoDialog = null; + + try { + tokenInfoDialog = new JFXDialog(serverListMainStackPane, dialog.load(), + JFXDialog.DialogTransition.CENTER); + } catch (IOException e) { + e.printStackTrace(); + } + + TokenInfoDialogController controller = dialog.getController(); + controller.setParentController(this); + controller.setHeader(header); + controller.setContent(body); + controller.setToken(token); + return tokenInfoDialog; } private JFXDialog createCustomizeDialog() { @@ -296,6 +369,10 @@ public class LobbyController implements Initializable { customizationDialog.close(); } + public void closeTokenInfoDialog() { + tokenInfoDialog.close(); + } + public void setRoomCode(String roomCode) { roomLabel.setText("Room: " + roomCode); } diff --git a/src/main/java/seng302/visualiser/controllers/dialogs/TokenInfoDialogController.java b/src/main/java/seng302/visualiser/controllers/dialogs/TokenInfoDialogController.java new file mode 100644 index 00000000..5f229dbd --- /dev/null +++ b/src/main/java/seng302/visualiser/controllers/dialogs/TokenInfoDialogController.java @@ -0,0 +1,72 @@ +package seng302.visualiser.controllers.dialogs; + +import com.jfoenix.controls.JFXButton; +import com.jfoenix.controls.JFXTextArea; +import java.net.URL; +import java.util.ResourceBundle; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.Initializable; +import javafx.scene.Group; +import javafx.scene.control.Button; +import javafx.scene.control.Label; +import javafx.scene.control.TextArea; +import javafx.scene.input.MouseEvent; +import javafx.scene.layout.Pane; +import javafx.scene.transform.Scale; +import javafx.scene.transform.Translate; +import seng302.utilities.Sounds; +import seng302.visualiser.controllers.LobbyController; + +/** + * Created by wmu16 on 28/09/17. + */ +public class TokenInfoDialogController implements Initializable { + + @FXML + private Label headerLabel; + @FXML + private TextArea contentText; + @FXML + private Pane tokenPane; + @FXML + private Button optionButton; + + private LobbyController lobbyController; + + @Override + public void initialize(URL location, ResourceBundle resources) { + optionButton.setOnMouseReleased(event -> { + Sounds.playButtonClick(); + lobbyController.closeTokenInfoDialog(); + }); + + contentText.setEditable(false); + + } + + + public void setContent(String content) { + contentText.setText(content); + } + + public void setHeader(String header) { + this.headerLabel.setText(header); + } + + public void setToken(Group token) { + tokenPane.getChildren().clear(); + + token.getTransforms().addAll( + new Translate(138 / 2, 138 / 2, 0), + new Scale(20, 20, 20)); + + tokenPane.getChildren().add(token); + } + + public void setParentController(LobbyController lobbyController) { + this.lobbyController = lobbyController; + } + + +} diff --git a/src/main/resources/css/LobbyView.css b/src/main/resources/css/LobbyView.css index 22871381..398f8eea 100644 --- a/src/main/resources/css/LobbyView.css +++ b/src/main/resources/css/LobbyView.css @@ -65,4 +65,8 @@ /*-fx-background-repeat: no-repeat;*/ /*-fx-background-size: cover;*/ -fx-background-color: dodgerblue; +} + +.tokenView { + -fx-cursor: hand; } \ No newline at end of file diff --git a/src/main/resources/css/TokenInfoDialog.css b/src/main/resources/css/TokenInfoDialog.css new file mode 100644 index 00000000..32e6723e --- /dev/null +++ b/src/main/resources/css/TokenInfoDialog.css @@ -0,0 +1,22 @@ +.text-area { + -fx-background-insets: 0; + -fx-background-color: transparent, white, transparent, white; +} + +.text-area .content { + -fx-background-color: transparent, white, transparent, white; +} + +.text-area:focused .content { + -fx-background-color: transparent, white, transparent, white; +} + +.text-area:focused { + -fx-highlight-fill: #7ecfff; +} + +.text-area .content { + -fx-padding: 10px; + -fx-text-fill: gray; + -fx-highlight-fill: #7ecfff; +} \ No newline at end of file diff --git a/src/main/resources/views/LobbyView.fxml b/src/main/resources/views/LobbyView.fxml index 69eeed47..6ca95c58 100644 --- a/src/main/resources/views/LobbyView.fxml +++ b/src/main/resources/views/LobbyView.fxml @@ -1,5 +1,6 @@ + @@ -79,9 +80,12 @@ - - - + + + @@ -106,123 +110,122 @@ - - - - + - - - - - - - - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + @@ -234,10 +237,10 @@ - - - - + + + + diff --git a/src/main/resources/views/dialogs/PopupDialog.fxml b/src/main/resources/views/dialogs/PopupDialog.fxml index 00574bc4..657a9c95 100644 --- a/src/main/resources/views/dialogs/PopupDialog.fxml +++ b/src/main/resources/views/dialogs/PopupDialog.fxml @@ -1,6 +1,11 @@ - + + + + + + @@ -9,6 +14,7 @@ +