diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000000000000000000000000000000000000..dd4c951ef44ebdc37bbe4a453aab974c815ca6f6 --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,7 @@ +<component name="InspectionProjectProfileManager"> + <settings> + <option name="PROJECT_PROFILE" value="Default" /> + <option name="USE_PROJECT_PROFILE" value="false" /> + <version value="1.0" /> + </settings> +</component> \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index c6e9a72a96bffb6ce40ce23e0f9e0623a701311a..fc45e5d1ccd129776fae9a28db0af25398ca6ad2 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,3 +1,4 @@ +<?xml version="1.0" encoding="UTF-8"?> <project version="4"> <component name="ExternalStorageConfigurationManager" enabled="true" /> <component name="MavenProjectsManager"> diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Controller/CommunityMapController.java b/src/main/java/de/hdm_stuttgart/battlearena/Controller/CommunityMapController.java index be1256f441fa09604694e890557db0bd53131531..db877f9ad027ae08a96f1365690014eace49f1d9 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Controller/CommunityMapController.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/CommunityMapController.java @@ -24,7 +24,7 @@ public class CommunityMapController implements Initializable { @FXML private TableColumn<DataItem, String> name; - Rectangle2D screen = Screen.getPrimary().getVisualBounds(); + private final Rectangle2D screen = Screen.getPrimary().getVisualBounds(); @Override public void initialize(URL url, ResourceBundle resourceBundle) { @@ -54,7 +54,7 @@ public class CommunityMapController implements Initializable { parent.getChildren().add(new SceneLoader().loadScene("MapForge")); } -// test values TODO: replace with db + // test values TODO: replace with db public static class DataItem { private final SimpleStringProperty name; diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Controller/CreateAccountController.java b/src/main/java/de/hdm_stuttgart/battlearena/Controller/CreateAccountController.java index 826cb76c7ba083c1cd0608fe5d6d83e28ef68733..26fedf89d991531bea80c5d98b1b4022bf3d81ff 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Controller/CreateAccountController.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/CreateAccountController.java @@ -11,6 +11,8 @@ import javafx.scene.control.RadioButton; import javafx.scene.control.TextField; import javafx.scene.control.ToggleGroup; import javafx.scene.layout.VBox; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import java.net.URL; import java.util.ResourceBundle; @@ -26,10 +28,10 @@ public class CreateAccountController implements Initializable { private TextField playerName, password; @FXML private Label errorMessage, passwordLabel; - - String selectedButton; - SceneLoader sceneLoader = new SceneLoader(); - Persistence persistence = Persistence.getInstance(); + private String selectedButton; + private final SceneLoader sceneLoader = new SceneLoader(); + private final Persistence persistence = Persistence.getInstance(); + private static final Logger log = LogManager.getLogger(SceneLoader.class); @Override public void initialize(URL url, ResourceBundle resourceBundle) { @@ -41,7 +43,7 @@ public class CreateAccountController implements Initializable { if (statistics.getSelectedToggle() != null) { RadioButton selectedToggle = (RadioButton) statistics.getSelectedToggle(); selectedButton = selectedToggle.getText(); - System.out.println(selectedButton); + log.info("Statistics tracking set to: " + selectedButton); } if (local.isSelected()) { password.setEditable(false); @@ -73,9 +75,11 @@ public class CreateAccountController implements Initializable { persistence.createAccount(playerName.getText(), password.getText(), accountType); persistence.resetPlayerStatistics(); persistence.loadPlayerStatistics(); + log.info(accountType + " Account created"); switchScene("MainMenu"); } catch (DatabaseException e) { errorMessage.setText(e.getMessage()); + log.debug(e.getMessage()); } } diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Controller/GameSceneController.java b/src/main/java/de/hdm_stuttgart/battlearena/Controller/GameSceneController.java index b461f4d7e40818daf7a8f2f05cb8ae9e28f702aa..34ba629ad41a879a0361d9e4c3f83b92094816e0 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Controller/GameSceneController.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/GameSceneController.java @@ -37,7 +37,6 @@ import java.util.*; import java.util.stream.Collectors; public class GameSceneController implements Initializable { - private static final Logger log = LogManager.getLogger(GameSceneController.class); @FXML private BorderPane gameScene; @@ -53,73 +52,34 @@ public class GameSceneController implements Initializable { private StackPane stackPane; private final Pane pause = new SceneLoader().loadScene("Pause"); + private final long targetFrameTime = 1_000_000_000 / 80; // sets the target frame time to 12.5 ms (80fps) + private long lastFrame = 0; private boolean wasPaused; - Screen screen = Screen.getPrimary(); - Rectangle2D visualBounds = screen.getVisualBounds(); + private final Screen screen = Screen.getPrimary(); + private final Rectangle2D visualBounds = screen.getVisualBounds(); final private double healthBarWidth = screen.getBounds().getWidth() / 5; ScreenDimensionCalculator screenCalculator = new ScreenDimensionCalculator(); private GraphicsContext graphicsContext2D; - InputHandler inputHandler = InputHandler.getInstance(); - RuntimeInfo runtimeInfo = RuntimeInfo.getInstance(); - - - GameMode gameMode = runtimeInfo.getGameMode(); - IEntity player; IEntity enemy; - EntityClass playerOneClass = runtimeInfo.getPlayerOneClass(); EntityClass playerTwoClass = runtimeInfo.getPlayerTwoClass(); - TileManager tileManager; //map data - - int horizontalTileCount = 18; int verticalTileCount = 18; int diffTileCount = 30; int scaledTileSize = 48; private final Biom biom = runtimeInfo.getMapBiom(); - private final long targetFrameTime = 1_000_000_000 / 80; // sets the target frame time to 12.5 ms (80fps) - private long lastFrame = 0; @Override public void initialize(URL url, ResourceBundle resourceBundle) { - double diagonalInches = screenCalculator.calculateDiagonalInches(visualBounds.getWidth(), - visualBounds.getHeight(), screen.getDpi()); -// for some reason scene builder overwrites css fonts bruh - playerHp.setFont(Font.loadFont(getClass().getResourceAsStream("/fonts/StarshipShadow.ttf"), 55)); - enemyHp.setFont(Font.loadFont(getClass().getResourceAsStream("/fonts/StarshipShadow.ttf"), 55)); - playerHp.setText("100%"); - playerHp.setMinWidth(120); - playerHp.setMaxWidth(120); - enemyHp.setText("100%"); - enemyHp.setMinWidth(120); - -// stopping the VBox from shrinking when health bar gets smaller - playerPane.setMinWidth(healthBarWidth); - playerPane.setMaxWidth(healthBarWidth); - enemyPane.setMinWidth(healthBarWidth); - enemyPane.setMaxWidth(healthBarWidth); - - playerHealth.setWidth(healthBarWidth); - enemyHealth.setWidth(healthBarWidth); - -// make it responsive - stackPane.heightProperty().addListener((observableValue, oldValue, newValue) -> { - canvas2D.setScaleY(newValue.doubleValue() / 870); - canvas2D.setScaleX(newValue.doubleValue() / 870); - }); - - System.out.println(stackPane.heightProperty()); - System.out.println("dpi: " + screen.getDpi()); - - System.out.println("inches: " + diagonalInches); + setScene(); graphicsContext2D = canvas2D.getGraphicsContext2D(); graphicsContext2D.setImageSmoothing(false); @@ -138,8 +98,6 @@ public class GameSceneController implements Initializable { verticalTileCount, runtimeInfo.getMapDataGame(), biom); - - runtimeInfo.setGameState(GameState.PLAYING); AnimationTimer gameLoop = new AnimationTimer() { @@ -167,6 +125,32 @@ public class GameSceneController implements Initializable { log.debug("Game loop started"); } + private void setScene() { +// for some reason scene builder overwrites css fonts + playerHp.setFont(Font.loadFont(getClass().getResourceAsStream("/fonts/StarshipShadow.ttf"), 55)); + enemyHp.setFont(Font.loadFont(getClass().getResourceAsStream("/fonts/StarshipShadow.ttf"), 55)); + playerHp.setText("100%"); + playerHp.setMinWidth(120); + playerHp.setMaxWidth(120); + enemyHp.setText("100%"); + enemyHp.setMinWidth(120); + +// stopping the VBox from shrinking when health bar gets smaller + playerPane.setMinWidth(healthBarWidth); + playerPane.setMaxWidth(healthBarWidth); + enemyPane.setMinWidth(healthBarWidth); + enemyPane.setMaxWidth(healthBarWidth); + + playerHealth.setWidth(healthBarWidth); + enemyHealth.setWidth(healthBarWidth); + +// make it responsive + stackPane.heightProperty().addListener((observableValue, oldValue, newValue) -> { + canvas2D.setScaleY(newValue.doubleValue() / 870); + canvas2D.setScaleX(newValue.doubleValue() / 870); + }); + } + private void pauseMenu() { // setting blur in for loop otherwise all child node will inherit blur from root including pause menu for (Node child : gameScene.getChildren()) { @@ -181,6 +165,7 @@ public class GameSceneController implements Initializable { } stackPane.getChildren().add(pause); wasPaused = true; + log.info("Game paused"); } private void resume() { @@ -192,9 +177,9 @@ public class GameSceneController implements Initializable { } stackPane.getChildren().remove(pause); wasPaused = false; + log.info("Game resumed"); } - private void updateContent() { player.updateEntity(this); enemy.updateEntity(this); @@ -229,7 +214,7 @@ public class GameSceneController implements Initializable { enemy.renderEntity(graphicsContext); renderGameplayObjects(graphicsContext); } - + private void renderGameplayObjects(GraphicsContext graphicsContext) { List<IEntity> gameplayObjects = runtimeInfo.getGameplayObjects(); for (IEntity gameplayObject : gameplayObjects) { @@ -261,7 +246,7 @@ public class GameSceneController implements Initializable { return scaledTileSize; } - public InputHandler getInputHandler(){ + public InputHandler getInputHandler() { return inputHandler; } } \ No newline at end of file diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Controller/IntroController.java b/src/main/java/de/hdm_stuttgart/battlearena/Controller/IntroController.java index 49fca79d9f840804e440b2d719dd657ab8553496..f875d299f5c512438c5f1934ef0b51367fa5331b 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Controller/IntroController.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/IntroController.java @@ -19,19 +19,16 @@ import java.util.Objects; import java.util.ResourceBundle; public class IntroController implements Initializable { - @FXML private MediaView mediaView; @FXML private BorderPane introParent; private final String fileName = "src/main/resources/videos/"; - // nextVideo() will iterate through this array so the next video will be played TODO: change the videos to non memes lmao + // nextVideo() will iterate through this array so the next video will be played private final String[] videos = {"black.mp4", "EngineIntro.mp4", "DigitalGlitch.mp4", "BattleArenaIntro.mp4"}; private File file = new File(fileName + videos[0]); private int counter = 0; private MediaPlayer mediaPlayer; - private final Persistence persistence = Persistence.getInstance(); - private static final Logger log = LogManager.getLogger(Persistence.class); @Override public void initialize(URL url, ResourceBundle resourceBundle) { diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Controller/LoadingScreenController.java b/src/main/java/de/hdm_stuttgart/battlearena/Controller/LoadingScreenController.java index 4ded7a6ffff9ad1d656da19dab7cc3205c93632d..91c701f8632b2dc261ca0a48b6bb5a60b69009ac 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Controller/LoadingScreenController.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/LoadingScreenController.java @@ -30,7 +30,6 @@ public class LoadingScreenController implements Initializable { private BorderPane parent; @FXML private ImageView logo, throbber; - private int counter = 0; private boolean statsLoaded = false; private final String[] loadingTips = { @@ -60,14 +59,15 @@ public class LoadingScreenController implements Initializable { private final List<String> shuffledTips = Arrays.asList(loadingTips); private static final Logger log = LogManager.getLogger(Persistence.class); - Rectangle2D screen = Screen.getPrimary().getVisualBounds(); - ThreadStartup1 thread1 = new ThreadStartup1(); - ThreadStartup2 thread2 = new ThreadStartup2(); - Persistence persistence = Persistence.getInstance(); + private final Rectangle2D screen = Screen.getPrimary().getVisualBounds(); + private final ThreadStartup1 thread1 = new ThreadStartup1(); + private final ThreadStartup2 thread2 = new ThreadStartup2(); + private final Persistence persistence = Persistence.getInstance(); Thread tipsThread = new Thread(() -> { try { setLoadingTips(); + log.debug("Executing tipsThread"); } catch (InterruptedException e) { log.info("Data finished loading"); } @@ -75,17 +75,21 @@ public class LoadingScreenController implements Initializable { Thread loadStatistics = new Thread(() -> { try { + log.debug("Executing loadStatistics thread"); Thread.sleep(5000); loadStatistics(); } catch (IOException e) { + log.error(e); throw new RuntimeException(); } catch (InterruptedException e) { + log.error(e); throw new RuntimeException(e); } }); Thread waitingForThread1 = new Thread(() -> { try { + log.debug("Executing waitingForThread1"); thread1.join(); } catch (InterruptedException e) { throw new RuntimeException(e); @@ -106,7 +110,6 @@ public class LoadingScreenController implements Initializable { private void setImages() { logo.setTranslateY(screen.getHeight() * 0.08); - System.out.println(screen.getHeight()); logo.setFitWidth(screen.getWidth() * 0.3); throbber.setFitWidth(screen.getWidth() * 0.07); logo.setPreserveRatio(true); @@ -151,7 +154,8 @@ public class LoadingScreenController implements Initializable { tipsThread.interrupt(); RuntimeInfo.getInstance().setGameState(GameState.MENU); parent.getScene().setRoot(FXMLLoader.load(Objects.requireNonNull(getClass().getResource("/fxml/MenuBorderPane.fxml")))); - } catch (IOException e) { + } catch (Exception e) { + log.error(e); throw new RuntimeException(e); } }); diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Controller/LocalCreateController.java b/src/main/java/de/hdm_stuttgart/battlearena/Controller/LocalCreateController.java index 69b2cb5b336306ffa11e72ad169745d1c83c9cd4..9284a0f05631f669f065ee4e3b8235b06b713322 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Controller/LocalCreateController.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/LocalCreateController.java @@ -1,12 +1,15 @@ package de.hdm_stuttgart.battlearena.Controller; import de.hdm_stuttgart.battlearena.Controller.Utilities.SceneLoader; +import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.Persistence; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.control.TitledPane; import javafx.scene.control.ToggleButton; import javafx.scene.control.ToggleGroup; import javafx.scene.layout.VBox; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import java.net.URL; import java.util.ResourceBundle; @@ -19,6 +22,8 @@ public class LocalCreateController implements Initializable { @FXML private ToggleGroup rounds; private final SceneLoader sceneLoader = new SceneLoader(); + private static final Logger log = LogManager.getLogger(Persistence.class); + @Override public void initialize(URL url, ResourceBundle resourceBundle) { @@ -26,9 +31,11 @@ public class LocalCreateController implements Initializable { if (rounds.getSelectedToggle() != null) { ToggleButton selected = (ToggleButton) rounds.getSelectedToggle(); roundsTitledPane.setText(selected.getText()); + log.info("Match rounds: " + selected.getText()); } }); } + @FXML private void backButton() { parent.getChildren().clear(); @@ -40,5 +47,4 @@ public class LocalCreateController implements Initializable { parent.getChildren().clear(); parent.getChildren().add(sceneLoader.loadScene("SkinSelection")); } - } diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Controller/LoginController.java b/src/main/java/de/hdm_stuttgart/battlearena/Controller/LoginController.java index aa95e2e8208a6eb2e75d53235d5f4fe68c11e763..1cf040890ea9f3498669680c7ddeefb72e69964d 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Controller/LoginController.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/LoginController.java @@ -2,19 +2,16 @@ package de.hdm_stuttgart.battlearena.Controller; import de.hdm_stuttgart.battlearena.Controller.Utilities.SceneLoader; import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.Exceptions.DatabaseException; -import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.Exceptions.ParserException; import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.Persistence; -import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.Utilities.Parser; import javafx.application.Platform; import javafx.fxml.FXML; -import javafx.fxml.Initializable; import javafx.scene.control.Label; import javafx.scene.control.TextField; import javafx.scene.layout.VBox; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; -import java.net.URL; import java.security.NoSuchAlgorithmException; -import java.util.ResourceBundle; public class LoginController { @FXML @@ -23,9 +20,9 @@ public class LoginController { private TextField playerName, password; @FXML private Label errorMessage; - - SceneLoader sceneLoader = new SceneLoader(); - Persistence persistence = Persistence.getInstance(); + private final SceneLoader sceneLoader = new SceneLoader(); + private final Persistence persistence = Persistence.getInstance(); + private static final Logger log = LogManager.getLogger(Persistence.class); private void switchScene(String name) { parent.getChildren().clear(); @@ -41,12 +38,15 @@ public class LoginController { Thread thread = new Thread(() -> { try { + log.info("Login Player: " + playerName); persistence.login(playerName.getText(), password.getText()); persistence.loadPlayerStatistics(); Platform.runLater(() -> switchScene("MainMenu")); } catch (NoSuchAlgorithmException e) { + log.error(e); throw new RuntimeException(e); } catch (DatabaseException e) { + log.debug(e.getMessage()); Platform.runLater(() -> errorMessage.setText(e.getMessage())); } }); diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Controller/MainMenuController.java b/src/main/java/de/hdm_stuttgart/battlearena/Controller/MainMenuController.java index d1efdc6aab8e9c380eb4c6bbdd122161ee521587..fb877b68420a3898f7a8c6e700093816342d0bbe 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Controller/MainMenuController.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/MainMenuController.java @@ -5,14 +5,11 @@ import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.Exceptions.Databas import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.Persistence; import de.hdm_stuttgart.battlearena.Model.Sound.MusicPlayer; import javafx.fxml.FXML; -import javafx.fxml.Initializable; import javafx.scene.control.Button; import javafx.scene.layout.VBox; -import javafx.stage.Screen; import javafx.stage.Stage; - -import java.net.URL; -import java.util.ResourceBundle; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; public class MainMenuController { @FXML @@ -22,6 +19,7 @@ public class MainMenuController { private final SceneLoader sceneLoader = new SceneLoader(); private final Persistence persistence = Persistence.getInstance(); private final MusicPlayer player = MusicPlayer.getInstance(); + private static final Logger log = LogManager.getLogger(Persistence.class); private void switchScene(String name) { parent.getChildren().clear(); @@ -53,6 +51,7 @@ public class MainMenuController { player.getScheduler().shutdown(); persistence.savePlayerStatistics(); persistence.saveSettings(); + log.info("Exiting game"); Stage stage = (Stage) exitButton.getScene().getWindow(); stage.close(); } diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Controller/MapForgeController.java b/src/main/java/de/hdm_stuttgart/battlearena/Controller/MapForgeController.java index 384f4de3556b6f59641080e9443eadba2cc781da..b090af45bfe7414142f40b22791e111d9e4caf28 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Controller/MapForgeController.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/MapForgeController.java @@ -15,7 +15,7 @@ import java.util.Objects; public class MapForgeController { @FXML private VBox parent; - SceneLoader sceneLoader = new SceneLoader(); + private final SceneLoader sceneLoader = new SceneLoader(); private final Persistence persistence = Persistence.getInstance(); @FXML diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Controller/MapSelectionController.java b/src/main/java/de/hdm_stuttgart/battlearena/Controller/MapSelectionController.java index 8e9476335c7285fd96e355ca9fb1766e8ea9dc36..bd769f0765bc5ad4b966062eef20363e93bbf090 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Controller/MapSelectionController.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/MapSelectionController.java @@ -31,15 +31,13 @@ public class MapSelectionController implements Initializable { @FXML private ToggleGroup textureToggle; - private int selectedMap; + private String selectedTexture, selectedMap; + private int mapIndex; private final SceneLoader sceneLoader = new SceneLoader(); - private final ArrayList<MapData> coreMaps = Persistence.getInstance().getCoreMaps(); - private static final Logger log = LogManager.getLogger(MapSelectionController.class); - - RuntimeInfo runtimeInfo = RuntimeInfo.getInstance(); + private final RuntimeInfo runtimeInfo = RuntimeInfo.getInstance(); @Override public void initialize(URL url, ResourceBundle resourceBundle) { @@ -51,23 +49,23 @@ public class MapSelectionController implements Initializable { textureToggle.selectedToggleProperty().addListener(((observableValue, oldToggle, newToggle) -> { if (textureToggle != null) { ToggleButton selected = (ToggleButton) textureToggle.getSelectedToggle(); - String value = selected.getText(); - switch (value) { + selectedTexture = selected.getText(); + switch (selectedTexture) { case "Bomberman": runtimeInfo.setMapBiom(Biom.BOMBERMAN); - textures.setText(value); + textures.setText(selectedTexture); break; case "Dark Lands": runtimeInfo.setMapBiom(Biom.DARK_LANDS); - textures.setText(value); + textures.setText(selectedTexture); break; case "Forrest": runtimeInfo.setMapBiom(Biom.FORREST); - textures.setText(value); + textures.setText(selectedTexture); break; case "Grass": runtimeInfo.setMapBiom(Biom.GRASS); - textures.setText(value); + textures.setText(selectedTexture); } } })); @@ -85,11 +83,9 @@ public class MapSelectionController implements Initializable { group.selectedToggleProperty().addListener((observableValue, oldToggle, newToggle) -> { if (group.getSelectedToggle() != null) { ToggleButton selected = (ToggleButton) group.getSelectedToggle(); - selectedMap = boxBox.getChildren().indexOf(selected); - System.out.println(selectedMap); - String value = selected.getText(); - maps.setText(value); - System.out.println(value); + mapIndex = boxBox.getChildren().indexOf(selected); + selectedMap = selected.getText(); + maps.setText(selectedMap); } }); } @@ -97,11 +93,13 @@ public class MapSelectionController implements Initializable { @FXML private void gameScene() { try { - RuntimeInfo.getInstance().setGameState(GameState.PLAYING); - RuntimeInfo.getInstance().setGameMap(coreMaps.get(selectedMap)); + RuntimeInfo.getInstance().setGameMap(coreMaps.get(mapIndex)); + log.info("Selected map: " + selectedMap); + log.info("Selected texture: " + selectedTexture); parent.getScene().setRoot(FXMLLoader.load(Objects.requireNonNull(getClass().getResource("/fxml/GameScene.fxml")))); + RuntimeInfo.getInstance().setGameState(GameState.PLAYING); } catch (IOException e) { - log.info(e.getCause()); + log.error(e); throw new RuntimeException(); } } diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Controller/MenuBorderPaneController.java b/src/main/java/de/hdm_stuttgart/battlearena/Controller/MenuBorderPaneController.java index ea40adc6b6cb662a7b2afd182a08b19f7c0e19a5..8b861d21b43392e78fa90bbac0297ed08817a49f 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Controller/MenuBorderPaneController.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/MenuBorderPaneController.java @@ -11,9 +11,7 @@ import javafx.fxml.Initializable; import javafx.geometry.Rectangle2D; import javafx.scene.control.Button; import javafx.scene.image.ImageView; -import javafx.scene.layout.BorderPane; import javafx.scene.layout.StackPane; -import javafx.scene.media.Media; import javafx.scene.media.MediaPlayer; import javafx.scene.media.MediaView; import javafx.stage.Screen; @@ -23,8 +21,6 @@ import java.net.URL; import java.util.*; public class MenuBorderPaneController implements Initializable { - @FXML - private BorderPane parent; @FXML private Button btnRight, btnLeft; @FXML @@ -41,7 +37,6 @@ public class MenuBorderPaneController implements Initializable { "pot", "catRave", "mineCraftCat2", "defense", "singingCat", "tutel", "catEating", "catJump", "bear", "pancake", "frog", "gtfo", "carl", "dog2", "slippery", "wolf", "legCat", "sad", "waaahhh"}; List<String> shuffledVideos = Arrays.asList(videoFiles); - Rectangle2D screen = Screen.getPrimary().getVisualBounds(); RuntimeInfo runtimeInfo = RuntimeInfo.getInstance(); @@ -68,11 +63,8 @@ public class MenuBorderPaneController implements Initializable { private void easterEgg() { btnRight.setOnMouseClicked(mouseEvent -> { musicCounter++; - switch (musicCounter) { - case 5: - runtimeInfo.setGameState(GameState.MEMES); - break; -// TODO: more + if (musicCounter == 4) { + runtimeInfo.setGameState(GameState.MEMES); } }); diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Controller/PauseController.java b/src/main/java/de/hdm_stuttgart/battlearena/Controller/PauseController.java index 385b2bed4756536903c276da21f2007094c1ff0f..c5b3394d55b4e7cea699d4bf6784b9c953828bc0 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Controller/PauseController.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/PauseController.java @@ -2,7 +2,6 @@ package de.hdm_stuttgart.battlearena.Controller; import de.hdm_stuttgart.battlearena.Controller.Enum.GameState; import de.hdm_stuttgart.battlearena.Controller.Utilities.SceneLoader; -import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.Persistence; import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.RuntimeInfo; import de.hdm_stuttgart.battlearena.Model.Inputs.InputHandler; import javafx.fxml.FXML; diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Controller/PauseSettingsController.java b/src/main/java/de/hdm_stuttgart/battlearena/Controller/PauseSettingsController.java index 802a0b37b6c38bf0eeb30263e381cbbc9974ca10..b30e6262fd3d3b0c313ee42c7743e517994cc325 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Controller/PauseSettingsController.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/PauseSettingsController.java @@ -17,11 +17,11 @@ public class PauseSettingsController implements Initializable { private VBox parent; @FXML private Slider musicSlider, sfxSlider; - SceneLoader sceneLoader = new SceneLoader(); + private final SceneLoader sceneLoader = new SceneLoader(); private int musicVolume, sfxVolume; - Persistence persistence = Persistence.getInstance(); - MusicPlayer player = MusicPlayer.getInstance(); - SoundEffects sfx = new SoundEffects(); + private final Persistence persistence = Persistence.getInstance(); + private final MusicPlayer player = MusicPlayer.getInstance(); + private final SoundEffects sfx = new SoundEffects(); @Override public void initialize(URL url, ResourceBundle resourceBundle) { diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Controller/PlayerCreateController.java b/src/main/java/de/hdm_stuttgart/battlearena/Controller/PlayerCreateController.java index 56f73045145a2c36b567f177e7423cd86f0bcd07..0d86f9f932645df2dfb7c1692b319b7ee992a444 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Controller/PlayerCreateController.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/PlayerCreateController.java @@ -8,8 +8,7 @@ import javafx.stage.Stage; public class PlayerCreateController { @FXML private VBox parent; - - SceneLoader sceneLoader = new SceneLoader(); + private final SceneLoader sceneLoader = new SceneLoader(); private void switchScene(String name) { parent.getChildren().clear(); diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Controller/SettingsController.java b/src/main/java/de/hdm_stuttgart/battlearena/Controller/SettingsController.java index f10900fc1bedda32939424bc352cd24598000718..195aaaa6af32a6356b9e4ee94d1e704d96b45fae 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Controller/SettingsController.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/SettingsController.java @@ -22,11 +22,11 @@ public class SettingsController implements Initializable { private VBox parent; @FXML private Slider musicSlider, sfxSlider; - SceneLoader sceneLoader = new SceneLoader(); + private final SceneLoader sceneLoader = new SceneLoader(); private int musicVolume, sfxVolume; - Persistence persistence = Persistence.getInstance(); - MusicPlayer player = MusicPlayer.getInstance(); - SoundEffects sfx = new SoundEffects(); + private final Persistence persistence = Persistence.getInstance(); + private final MusicPlayer player = MusicPlayer.getInstance(); + private final SoundEffects sfx = new SoundEffects(); @Override public void initialize(URL url, ResourceBundle resourceBundle) { diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Controller/SkinSelectionController.java b/src/main/java/de/hdm_stuttgart/battlearena/Controller/SkinSelectionController.java index 04cb45c4e227ac4ca3abac516b1c07f43951096f..6c33ca6e90bf1e51034774959e53b53f7b2c1aa0 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Controller/SkinSelectionController.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/SkinSelectionController.java @@ -1,6 +1,8 @@ package de.hdm_stuttgart.battlearena.Controller; import de.hdm_stuttgart.battlearena.Controller.Utilities.SceneLoader; +import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.RuntimeInfo; +import de.hdm_stuttgart.battlearena.Model.Entity.EntityClass; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.geometry.Rectangle2D; @@ -9,6 +11,8 @@ import javafx.scene.control.ToggleGroup; import javafx.scene.image.ImageView; import javafx.scene.layout.VBox; import javafx.stage.Screen; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import java.net.URL; import java.util.ResourceBundle; @@ -17,25 +21,57 @@ public class SkinSelectionController implements Initializable { @FXML private VBox parent; @FXML - private ToggleGroup selectionButton; + private ToggleGroup playerOne, playerTwo; @FXML - private ImageView selection1, selection2, selection3; + private ImageView playerOne1, playerOne2, playerOne3, playerTwo1, playerTwo2, playerTwo3; + private String playerOneSkin, playerTwoSkin; + private final RuntimeInfo runtimeInfo = RuntimeInfo.getInstance(); + private static final Logger log = LogManager.getLogger(MapSelectionController.class); @Override public void initialize(URL url, ResourceBundle resourceBundle) { - selectionButton.selectedToggleProperty().addListener((observableValue, oldToggle, newToggle) -> { - if (selectionButton.getSelectedToggle() != null) { - ToggleButton selected = (ToggleButton) selectionButton.getSelectedToggle(); - String value = selected.getText(); - System.out.println(value); + skinSelection(playerOne); + skinSelection(playerTwo); + setImageWidth(playerOne1, playerOne2, playerOne3, playerTwo1, playerTwo2, playerTwo3); + } + + private void skinSelection(ToggleGroup player) { + player.selectedToggleProperty().addListener((observableValue, oldToggle, newToggle) -> { + if (player.getSelectedToggle() != null) { + ToggleButton selected = (ToggleButton) player.getSelectedToggle(); + + 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); + } + } } }); - setImageWidth(selection1, selection2, selection3); } 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(); - final double imageWidth = screen.getWidth() * 0.2; + final double imageWidth = screen.getWidth() * 0.1; for (ImageView image : imageViews) { image.setFitWidth(imageWidth); image.setPreserveRatio(true); @@ -50,6 +86,8 @@ public class SkinSelectionController implements Initializable { @FXML private void gameScene() { + log.info("Player 1 skin: " + playerOneSkin); + log.info("Player 2 skin: " + playerTwoSkin); parent.getChildren().clear(); parent.getChildren().add(new SceneLoader().loadScene("MapSelection")); } diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Controller/StatisticsController.java b/src/main/java/de/hdm_stuttgart/battlearena/Controller/StatisticsController.java index ee8ccd517fc9c48f3178e792d136dba3f20783e8..da4785be1762fa46a442be0e1d635a13ac357fe7 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Controller/StatisticsController.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/StatisticsController.java @@ -15,16 +15,14 @@ import java.net.URL; import java.util.ResourceBundle; public class StatisticsController implements Initializable { - @FXML private Text blocks, deaths, gameTime, gamesLost, gamesWon, kills; @FXML private VBox parent; @FXML private PieChart kd, wl; - SceneLoader sceneLoader = new SceneLoader(); - - Persistence persistence = Persistence.getInstance(); + private final SceneLoader sceneLoader = new SceneLoader(); + private final Persistence persistence = Persistence.getInstance(); public void mainMenuScene() { parent.getChildren().clear(); diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Controller/Utilities/SceneLoader.java b/src/main/java/de/hdm_stuttgart/battlearena/Controller/Utilities/SceneLoader.java index 8c0e8b4a9487316777dd42b0823e07b737386208..6d89e2b373ccb0260f0593609158518990005b09 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Controller/Utilities/SceneLoader.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/Utilities/SceneLoader.java @@ -9,9 +9,7 @@ import org.apache.logging.log4j.Logger; import java.net.URL; public class SceneLoader { - private static final Logger log = LogManager.getLogger(SceneLoader.class); - private Pane view; //helper method for loading fxml files in the scene @@ -25,11 +23,11 @@ public class SceneLoader { new FXMLLoader(); view = FXMLLoader.load(filePath); + log.info("Scene switched to " + filePath); } catch (Exception e) { log.debug("Scene " + fileName + " not found"); } return view; } - } \ No newline at end of file diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Controller/Utilities/ToggleButtonTransition.java b/src/main/java/de/hdm_stuttgart/battlearena/Controller/Utilities/ToggleButtonTransition.java index 94d51e4b2524cc0428678adadcf57b01e61dd643..a4c5684591d138be026fad29a6c05c188ad21ce9 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Controller/Utilities/ToggleButtonTransition.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/Utilities/ToggleButtonTransition.java @@ -6,17 +6,14 @@ import javafx.scene.control.skin.ToggleButtonSkin; import javafx.util.Duration; public class ToggleButtonTransition extends ToggleButtonSkin { - private final FadeTransition fadeIn; - private final FadeTransition fadeOut; - public ToggleButtonTransition(ToggleButton toggleButton) { super(toggleButton); - fadeIn = new FadeTransition(Duration.millis(150)); + FadeTransition fadeIn = new FadeTransition(Duration.millis(150)); fadeIn.setNode(toggleButton); fadeIn.setToValue(1); - fadeOut = new FadeTransition(Duration.millis(150)); + FadeTransition fadeOut = new FadeTransition(Duration.millis(150)); fadeOut.setNode(toggleButton); fadeOut.setToValue(0.5); diff --git a/src/main/resources/fxml/MenuBorderPane.fxml b/src/main/resources/fxml/MenuBorderPane.fxml index ed87f4119563968953eef9ff3013783e8ce18a5e..24a64f9fcb594294872951120ed280565e40b334 100644 --- a/src/main/resources/fxml/MenuBorderPane.fxml +++ b/src/main/resources/fxml/MenuBorderPane.fxml @@ -7,7 +7,7 @@ <?import javafx.scene.layout.StackPane?> <?import javafx.scene.text.Font?> -<BorderPane id="mainMenu" fx:id="parent" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/21" xmlns:fx="http://javafx.com/fxml/1" fx:controller="de.hdm_stuttgart.battlearena.Controller.MenuBorderPaneController"> +<BorderPane id="mainMenu" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/21" xmlns:fx="http://javafx.com/fxml/1" fx:controller="de.hdm_stuttgart.battlearena.Controller.MenuBorderPaneController"> <right> <Button fx:id="btnRight" mnemonicParsing="false" prefWidth="111.0" BorderPane.alignment="BOTTOM_CENTER"> <graphic> diff --git a/src/main/resources/fxml/SkinSelection.fxml b/src/main/resources/fxml/SkinSelection.fxml index c8b09f8e6f80b3447949f928e38c900e368b22de..8e074b509d60f361acb6c7a63073fd407d51dfcc 100644 --- a/src/main/resources/fxml/SkinSelection.fxml +++ b/src/main/resources/fxml/SkinSelection.fxml @@ -1,6 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <?import javafx.scene.control.Button?> +<?import javafx.scene.control.Label?> <?import javafx.scene.control.ToggleButton?> <?import javafx.scene.control.ToggleGroup?> <?import javafx.scene.image.Image?> @@ -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"> <children> + <Label text="Player 1" /> <HBox alignment="CENTER" prefHeight="100.0" prefWidth="200.0" spacing="40.0"> <children> - <ToggleButton contentDisplay="TOP" mnemonicParsing="false" styleClass="skinSelection" text="Elias"> + <ToggleButton contentDisplay="TOP" mnemonicParsing="false" styleClass="skinSelection" text="High Born"> <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 url="@../textures/images/elias.png" /> + <Image url="@../textures/player/high_res/highBorn.png" /> </image> </ImageView> </graphic> <toggleGroup> - <ToggleGroup fx:id="selectionButton" /> + <ToggleGroup fx:id="playerOne" /> </toggleGroup> </ToggleButton> - <ToggleButton contentDisplay="TOP" mnemonicParsing="false" styleClass="skinSelection" text="Erzan" toggleGroup="$selectionButton"> + <ToggleButton contentDisplay="TOP" mnemonicParsing="false" styleClass="skinSelection" text="Human" toggleGroup="$playerOne"> <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 url="@../textures/images/erzan.png" /> + <Image url="@../textures/player/high_res/human.png" /> </image> </ImageView> </graphic> </ToggleButton> - <ToggleButton contentDisplay="TOP" mnemonicParsing="false" styleClass="skinSelection" text="Martin" toggleGroup="$selectionButton"> + <ToggleButton contentDisplay="TOP" mnemonicParsing="false" styleClass="skinSelection" text="Sentinel" toggleGroup="$playerOne"> <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 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> </ImageView> </graphic> diff --git a/src/main/resources/player/appSettings.json b/src/main/resources/player/appSettings.json index 29ddb093e518e6f1540e962d650ed94caabb1c5f..b09c56e399848e7f331f341a39652fb9e499b789 100644 --- a/src/main/resources/player/appSettings.json +++ b/src/main/resources/player/appSettings.json @@ -1,4 +1,4 @@ { "sfxVolume": 16, - "musicVolume": 39 + "musicVolume": 0 } \ No newline at end of file diff --git a/src/main/resources/player/playerAccount.json b/src/main/resources/player/playerAccount.json index e4031451fd72b6bf10eb91b84f82aeb7f608f859..2580dc191f7349bc8b8f8e5435a9deaa65147908 100644 --- a/src/main/resources/player/playerAccount.json +++ b/src/main/resources/player/playerAccount.json @@ -1,5 +1,5 @@ { - "playerName": "Jonas", + "playerName": "kaka", "accountPassword": "", "accountType": "LOCAL" } \ No newline at end of file diff --git a/src/main/resources/textures/player/high_res/highBorn.png b/src/main/resources/textures/player/high_res/highBorn.png new file mode 100644 index 0000000000000000000000000000000000000000..130cd5b07eb6e42474abef8e60cf2af8232a0f06 Binary files /dev/null and b/src/main/resources/textures/player/high_res/highBorn.png differ diff --git a/src/main/resources/textures/player/high_res/human.png b/src/main/resources/textures/player/high_res/human.png new file mode 100644 index 0000000000000000000000000000000000000000..ecd69bc6b099bd4b899155b7f0e9199e9a49fb02 Binary files /dev/null and b/src/main/resources/textures/player/high_res/human.png differ diff --git a/src/main/resources/textures/player/high_res/sentinel.png b/src/main/resources/textures/player/high_res/sentinel.png new file mode 100644 index 0000000000000000000000000000000000000000..ebcc6a9ffc8d66aa9b7bc5a5407787aef05ea62a Binary files /dev/null and b/src/main/resources/textures/player/high_res/sentinel.png differ