Tokens now display on the right and are clickable for further information

#story[1293]
This commit is contained in:
William Muir
2017-09-28 12:08:14 +13:00
parent 705669ad07
commit 5cbd729214
6 changed files with 314 additions and 130 deletions
@@ -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<Integer, ClientYacht> 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<Group> tokensPreviews = new ArrayList<>(
Arrays.asList(speedToken, handlingToken, windWalkerToken, bumperToken, randomToken));
tokensPreviews.forEach((tokenPreview) -> {
tokenPreview.getTransforms().addAll(
HashMap<Pane, Group> 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);
}
@@ -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;
}
}