Skip to content
Snippets Groups Projects
Commit 0a23b2a5 authored by Tran Peter's avatar Tran Peter
Browse files

feat(skin selection): implement player skin selection

parent 22c265ff
No related branches found
No related tags found
5 merge requests!74V1,!73Initial commit,!71Merge DataBase into Development,!54Update: coreMaps.json (added new maps),!50Merge ui into development
...@@ -2,6 +2,7 @@ package de.hdm_stuttgart.battlearena.Controller; ...@@ -2,6 +2,7 @@ package de.hdm_stuttgart.battlearena.Controller;
import de.hdm_stuttgart.battlearena.Controller.Utilities.SceneLoader; import de.hdm_stuttgart.battlearena.Controller.Utilities.SceneLoader;
import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.RuntimeInfo; import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.RuntimeInfo;
import de.hdm_stuttgart.battlearena.Model.Entity.EntityClass;
import javafx.fxml.FXML; import javafx.fxml.FXML;
import javafx.fxml.Initializable; import javafx.fxml.Initializable;
import javafx.geometry.Rectangle2D; import javafx.geometry.Rectangle2D;
...@@ -20,31 +21,57 @@ public class SkinSelectionController implements Initializable { ...@@ -20,31 +21,57 @@ public class SkinSelectionController implements Initializable {
@FXML @FXML
private VBox parent; private VBox parent;
@FXML @FXML
private ToggleGroup selectionButton; private ToggleGroup playerOne, playerTwo;
@FXML @FXML
private ImageView selection1, selection2, selection3; private ImageView playerOne1, playerOne2, playerOne3, playerTwo1, playerTwo2, playerTwo3;
private String selectedSkin; private String playerOneSkin, playerTwoSkin;
private final RuntimeInfo runtimeInfo = RuntimeInfo.getInstance(); private final RuntimeInfo runtimeInfo = RuntimeInfo.getInstance();
private static final Logger log = LogManager.getLogger(MapSelectionController.class); private static final Logger log = LogManager.getLogger(MapSelectionController.class);
@Override @Override
public void initialize(URL url, ResourceBundle resourceBundle) { public void initialize(URL url, ResourceBundle resourceBundle) {
skinSelection(); skinSelection(playerOne);
setImageWidth(selection1, selection2, selection3); skinSelection(playerTwo);
setImageWidth(playerOne1, playerOne2, playerOne3, playerTwo1, playerTwo2, playerTwo3);
} }
private void skinSelection() { private void skinSelection(ToggleGroup player) {
selectionButton.selectedToggleProperty().addListener((observableValue, oldToggle, newToggle) -> { player.selectedToggleProperty().addListener((observableValue, oldToggle, newToggle) -> {
if (selectionButton.getSelectedToggle() != null) { if (player.getSelectedToggle() != null) {
ToggleButton selected = (ToggleButton) selectionButton.getSelectedToggle(); ToggleButton selected = (ToggleButton) player.getSelectedToggle();
selectedSkin = selected.getText();
if (player == playerOne) {
playerOneSkin = selected.getText();
switch (playerOneSkin) {
case "High Born":
runtimeInfo.setPlayerOneClass(EntityClass.HIGH_BORN);
break;
case "Human":
runtimeInfo.setPlayerOneClass(EntityClass.HUMAN);
break;
case "Sentinel":
runtimeInfo.setPlayerOneClass(EntityClass.SENTINELS);
}
} else {
playerTwoSkin = selected.getText();
switch (playerTwoSkin) {
case "High Born":
runtimeInfo.setPlayerTwoClass(EntityClass.HIGH_BORN);
break;
case "Human":
runtimeInfo.setPlayerTwoClass(EntityClass.HUMAN);
break;
case "Sentinel":
runtimeInfo.setPlayerTwoClass(EntityClass.SENTINELS);
}
}
} }
}); });
} }
private void setImageWidth(ImageView... imageViews) { // the ... allows for zero or more arguments seperated by a comma, will pass argument as an array private void setImageWidth(ImageView... imageViews) { // the ... allows for zero or more arguments seperated by a comma, will pass argument as an array
Rectangle2D screen = Screen.getPrimary().getVisualBounds(); Rectangle2D screen = Screen.getPrimary().getVisualBounds();
final double imageWidth = screen.getWidth() * 0.2; final double imageWidth = screen.getWidth() * 0.1;
for (ImageView image : imageViews) { for (ImageView image : imageViews) {
image.setFitWidth(imageWidth); image.setFitWidth(imageWidth);
image.setPreserveRatio(true); image.setPreserveRatio(true);
...@@ -59,7 +86,8 @@ public class SkinSelectionController implements Initializable { ...@@ -59,7 +86,8 @@ public class SkinSelectionController implements Initializable {
@FXML @FXML
private void gameScene() { private void gameScene() {
log.info("Selected skin: " + selectedSkin); log.info("Player 1 skin: " + playerOneSkin);
log.info("Player 2 skin: " + playerTwoSkin);
parent.getChildren().clear(); parent.getChildren().clear();
parent.getChildren().add(new SceneLoader().loadScene("MapSelection")); parent.getChildren().add(new SceneLoader().loadScene("MapSelection"));
} }
......
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?> <?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.ToggleButton?> <?import javafx.scene.control.ToggleButton?>
<?import javafx.scene.control.ToggleGroup?> <?import javafx.scene.control.ToggleGroup?>
<?import javafx.scene.image.Image?> <?import javafx.scene.image.Image?>
...@@ -10,34 +11,70 @@ ...@@ -10,34 +11,70 @@
<VBox fx:id="parent" alignment="CENTER" prefHeight="400.0" prefWidth="600.0" spacing="20.0" xmlns="http://javafx.com/javafx/21" xmlns:fx="http://javafx.com/fxml/1" fx:controller="de.hdm_stuttgart.battlearena.Controller.SkinSelectionController"> <VBox fx:id="parent" alignment="CENTER" prefHeight="400.0" prefWidth="600.0" spacing="20.0" xmlns="http://javafx.com/javafx/21" xmlns:fx="http://javafx.com/fxml/1" fx:controller="de.hdm_stuttgart.battlearena.Controller.SkinSelectionController">
<children> <children>
<Label text="Player 1" />
<HBox alignment="CENTER" prefHeight="100.0" prefWidth="200.0" spacing="40.0"> <HBox alignment="CENTER" prefHeight="100.0" prefWidth="200.0" spacing="40.0">
<children> <children>
<ToggleButton contentDisplay="TOP" mnemonicParsing="false" styleClass="skinSelection" text="Elias"> <ToggleButton contentDisplay="TOP" mnemonicParsing="false" styleClass="skinSelection" text="High Born">
<graphic> <graphic>
<ImageView fx:id="selection1" fitHeight="700.0" fitWidth="700.0" pickOnBounds="true" preserveRatio="true"> <ImageView fx:id="playerOne1" fitHeight="700.0" fitWidth="700.0" pickOnBounds="true" preserveRatio="true">
<image> <image>
<Image url="@../textures/images/elias.png" /> <Image url="@../textures/player/high_res/highBorn.png" />
</image> </image>
</ImageView> </ImageView>
</graphic> </graphic>
<toggleGroup> <toggleGroup>
<ToggleGroup fx:id="selectionButton" /> <ToggleGroup fx:id="playerOne" />
</toggleGroup> </toggleGroup>
</ToggleButton> </ToggleButton>
<ToggleButton contentDisplay="TOP" mnemonicParsing="false" styleClass="skinSelection" text="Erzan" toggleGroup="$selectionButton"> <ToggleButton contentDisplay="TOP" mnemonicParsing="false" styleClass="skinSelection" text="Human" toggleGroup="$playerOne">
<graphic> <graphic>
<ImageView fx:id="selection2" fitHeight="700.0" fitWidth="700.0" pickOnBounds="true" preserveRatio="true"> <ImageView fx:id="playerOne2" fitHeight="700.0" fitWidth="700.0" pickOnBounds="true" preserveRatio="true">
<image> <image>
<Image url="@../textures/images/erzan.png" /> <Image url="@../textures/player/high_res/human.png" />
</image> </image>
</ImageView> </ImageView>
</graphic> </graphic>
</ToggleButton> </ToggleButton>
<ToggleButton contentDisplay="TOP" mnemonicParsing="false" styleClass="skinSelection" text="Martin" toggleGroup="$selectionButton"> <ToggleButton contentDisplay="TOP" mnemonicParsing="false" styleClass="skinSelection" text="Sentinel" toggleGroup="$playerOne">
<graphic> <graphic>
<ImageView fx:id="selection3" fitHeight="700.0" fitWidth="700.0" pickOnBounds="true" preserveRatio="true"> <ImageView fx:id="playerOne3" fitHeight="700.0" fitWidth="700.0" pickOnBounds="true" preserveRatio="true">
<image> <image>
<Image url="@../textures/images/martin.png" /> <Image url="@../textures/player/high_res/sentinel.png" />
</image>
</ImageView>
</graphic>
</ToggleButton>
</children>
</HBox>
<Label text="Player 2" />
<HBox alignment="CENTER" prefHeight="100.0" prefWidth="200.0" spacing="40.0">
<children>
<ToggleButton contentDisplay="TOP" mnemonicParsing="false" styleClass="skinSelection" text="High Born">
<graphic>
<ImageView fx:id="playerTwo1" fitHeight="700.0" fitWidth="700.0" pickOnBounds="true" preserveRatio="true">
<image>
<Image url="@../textures/player/high_res/highBorn.png" />
</image>
</ImageView>
</graphic>
<toggleGroup>
<ToggleGroup fx:id="playerTwo" />
</toggleGroup>
</ToggleButton>
<ToggleButton contentDisplay="TOP" mnemonicParsing="false" styleClass="skinSelection" text="Human" toggleGroup="$playerTwo">
<graphic>
<ImageView fx:id="playerTwo2" fitHeight="700.0" fitWidth="700.0" pickOnBounds="true" preserveRatio="true">
<image>
<Image url="@../textures/player/high_res/human.png" />
</image>
</ImageView>
</graphic>
</ToggleButton>
<ToggleButton contentDisplay="TOP" mnemonicParsing="false" styleClass="skinSelection" text="Sentinel" toggleGroup="$playerTwo">
<graphic>
<ImageView fx:id="playerTwo3" fitHeight="700.0" fitWidth="700.0" pickOnBounds="true" preserveRatio="true">
<image>
<Image url="@../textures/player/high_res/sentinel.png" />
</image> </image>
</ImageView> </ImageView>
</graphic> </graphic>
......
src/main/resources/textures/player/high_res/highBorn.png

12.7 KiB

src/main/resources/textures/player/high_res/human.png

14.4 KiB

src/main/resources/textures/player/high_res/sentinel.png

17.4 KiB

0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment