diff --git a/README.md b/README.md index 4ba72199d073a0108190f3dfef8424e14fce5082..eab1454caa44dab8605d96de620ae2ec8ebbe63c 100644 --- a/README.md +++ b/README.md @@ -3,3 +3,15 @@ ### Known issues: - JavaFX Mediaplayer is buggy under Windows 11. Videos can have weird behaviors and sometimes won't load at all - SQL server is very slow (thanks Oracle) + +<br><br> +#### FAQ: +Why is the Game loading so long? <br> - cry about it + +Why can't I connect to the Multiplayer? <br> - cry about it + +The character is moving too quickly <br> - cry about it + +The UI is too small <br> - cry about it + +Why doesn't the intro load? <br> - cry about it \ No newline at end of file diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Controller/CreditsController.java b/src/main/java/de/hdm_stuttgart/battlearena/Controller/CreditsController.java index 3473328c663c30ef1f7dc40be00edc7ba5957a44..a056de0b757b1aa75cb1537a0aaf17b16d2e9540 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Controller/CreditsController.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/CreditsController.java @@ -1,6 +1,8 @@ package de.hdm_stuttgart.battlearena.Controller; +import de.hdm_stuttgart.battlearena.Controller.Enum.GameState; import de.hdm_stuttgart.battlearena.Controller.Utilities.CreateMediaPlayer; +import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.RuntimeInfo; import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; import javafx.fxml.Initializable; @@ -42,6 +44,7 @@ public class CreditsController implements Initializable { private void videoEnd() { try { // I don't know how to return to the options scene, so it just goes back to the main menu :( + RuntimeInfo.getInstance().setGameState(GameState.MENU); mediaPlayer.dispose(); parent.getChildren().clear(); parent.getScene().setRoot(FXMLLoader.load(Objects.requireNonNull(getClass().getResource("/fxml/MenuBorderPane.fxml")))); 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 a68fc576da646b43cf82367b5a1addd9a29ddbb1..f0867a12a55675f930f5f3ba739a5eb6f5ba4cb2 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Controller/GameSceneController.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/GameSceneController.java @@ -15,7 +15,6 @@ import de.hdm_stuttgart.battlearena.Model.Inputs.InputHandler; import de.hdm_stuttgart.battlearena.Model.Map.Biom; import de.hdm_stuttgart.battlearena.Model.Map.TileManager; -import de.hdm_stuttgart.battlearena.Model.Sound.SoundEffects; import javafx.animation.AnimationTimer; import javafx.fxml.FXML; import javafx.fxml.Initializable; @@ -25,9 +24,7 @@ import javafx.scene.canvas.Canvas; import javafx.scene.canvas.GraphicsContext; import javafx.scene.control.Label; -import javafx.scene.effect.Effect; import javafx.scene.effect.GaussianBlur; -import javafx.scene.effect.Lighting; import javafx.scene.layout.*; import javafx.scene.shape.Rectangle; import javafx.scene.text.Font; @@ -35,7 +32,6 @@ import javafx.stage.Screen; import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager; -import java.io.IOException; import java.net.URL; import java.util.*; import java.util.stream.Collectors; 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 a201e3eec425859dc22255b5c25b946d9db68003..4ded7a6ffff9ad1d656da19dab7cc3205c93632d 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Controller/LoadingScreenController.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/LoadingScreenController.java @@ -54,7 +54,8 @@ public class LoadingScreenController implements Initializable { "Apparently Jonas is above the law.", "Jonas has lost his Game Dev Role in Discord.", "Maxe is a light mode user. Poor soul...", - "Did you know, that Elias almost destroyed our GitLab Repo?" + "Did you know, that Elias almost destroyed our GitLab Repo?", + "This Game is sponsored by ChatGPTâ„¢" }; private final List<String> shuffledTips = Arrays.asList(loadingTips); @@ -74,7 +75,7 @@ public class LoadingScreenController implements Initializable { Thread loadStatistics = new Thread(() -> { try { - Thread.sleep(4000); + Thread.sleep(5000); loadStatistics(); } catch (IOException e) { throw new RuntimeException(); 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 3b569f812f529b473b3544ee5667596669af57ac..d1efdc6aab8e9c380eb4c6bbdd122161ee521587 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Controller/MainMenuController.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/MainMenuController.java @@ -3,6 +3,7 @@ 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.Persistence; +import de.hdm_stuttgart.battlearena.Model.Sound.MusicPlayer; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.control.Button; @@ -20,6 +21,7 @@ public class MainMenuController { private Button exitButton; private final SceneLoader sceneLoader = new SceneLoader(); private final Persistence persistence = Persistence.getInstance(); + private final MusicPlayer player = MusicPlayer.getInstance(); private void switchScene(String name) { parent.getChildren().clear(); @@ -48,6 +50,7 @@ public class MainMenuController { @FXML private void exit() throws DatabaseException { + player.getScheduler().shutdown(); persistence.savePlayerStatistics(); persistence.saveSettings(); Stage stage = (Stage) exitButton.getScene().getWindow(); 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 7fda7cbda5c11631d8680213e988de2a9c6209d5..ea40adc6b6cb662a7b2afd182a08b19f7c0e19a5 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Controller/MenuBorderPaneController.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/MenuBorderPaneController.java @@ -67,6 +67,7 @@ public class MenuBorderPaneController implements Initializable { private void easterEgg() { btnRight.setOnMouseClicked(mouseEvent -> { + musicCounter++; switch (musicCounter) { case 5: runtimeInfo.setGameState(GameState.MEMES); 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 697b43351a03f3ca6ee5b6ac545f5a50480fe721..f10900fc1bedda32939424bc352cd24598000718 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Controller/SettingsController.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/SettingsController.java @@ -1,7 +1,9 @@ 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.Sound.MusicPlayer; import de.hdm_stuttgart.battlearena.Model.Sound.SoundEffects; import javafx.fxml.FXML; @@ -34,6 +36,7 @@ public class SettingsController implements Initializable { @FXML private void creditScene() throws IOException { + RuntimeInfo.getInstance().setGameState(GameState.NONE); parent.getChildren().clear(); parent.getScene().setRoot(FXMLLoader.load(Objects.requireNonNull(getClass().getResource("/fxml/credits.fxml")))); } diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Main/Driver.java b/src/main/java/de/hdm_stuttgart/battlearena/Main/Driver.java index f8431f9fcf7c982948b7f53ead47f380914874ea..83297700dd3dff0d7550224eef882ca59a72d8e4 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Main/Driver.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Main/Driver.java @@ -6,6 +6,8 @@ import de.hdm_stuttgart.battlearena.Model.Inputs.InputHandler; import de.hdm_stuttgart.battlearena.Model.Sound.MusicPlayer; import javafx.application.Application; +import javafx.application.Platform; +import javafx.event.EventHandler; import javafx.fxml.FXMLLoader; import javafx.geometry.Rectangle2D; import javafx.scene.Parent; @@ -16,6 +18,7 @@ import javafx.stage.Screen; import javafx.stage.Stage; import javafx.stage.StageStyle; +import javafx.stage.WindowEvent; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -59,6 +62,8 @@ public class Driver extends Application { MusicPlayer player = MusicPlayer.getInstance(); player.startGameStateMonitoring(); + stage.setOnCloseRequest(windowEvent -> MusicPlayer.getInstance().getScheduler().shutdown()); + stage.show(); log.debug("Project started successfully!"); diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/MusicPlayer.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/MusicPlayer.java index c48ea216681009f123590927dbd21d4e00687433..f77fa54d23b8a291380e4ab5bb036e9689312540 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/MusicPlayer.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/MusicPlayer.java @@ -36,13 +36,15 @@ public class MusicPlayer{ private GameState currentGameState; private SoundFileManager fileManager = new SoundFileManager(); + private ScheduledExecutorService scheduler; + private MusicPlayer(){} public void startGameStateMonitoring(){ - ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor(); + scheduler = Executors.newSingleThreadScheduledExecutor(); scheduler.scheduleAtFixedRate(()->{ GameState newGameState = RuntimeInfo.getInstance().getGameState(); if(currentGameState != newGameState){ @@ -105,6 +107,7 @@ public class MusicPlayer{ public int getVolume(){ return persistence.getSettings().getMusicVolume(); } + public ScheduledExecutorService getScheduler(){return scheduler;} public static MusicPlayer getInstance(){return musicPlayerSingleton;} diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/MusicType.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/MusicType.java deleted file mode 100644 index b7d5924e85a9559d88db4bf4a295fd235fc2aa5b..0000000000000000000000000000000000000000 --- a/src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/MusicType.java +++ /dev/null @@ -1,16 +0,0 @@ -package de.hdm_stuttgart.battlearena.Model.Sound; - -public enum MusicType { - MENU("src/main/resources/sound/music/menu"), - OPTIONS("src/main/resources/sound/music/options"), - GAME("src/main/resources/sound/music/game"); - - private String path; - MusicType(String path){ - this.path = path; - } - - public String getPath(){ - return path; - } -} diff --git a/src/main/resources/player/appSettings.json b/src/main/resources/player/appSettings.json index cabb64eaff39680907636d982d66c8408a5a6e26..29ddb093e518e6f1540e962d650ed94caabb1c5f 100644 --- a/src/main/resources/player/appSettings.json +++ b/src/main/resources/player/appSettings.json @@ -1,4 +1,4 @@ { - "sfxVolume": 0, - "musicVolume": 11 + "sfxVolume": 16, + "musicVolume": 39 } \ No newline at end of file diff --git a/src/main/resources/textures/images/background.png b/src/main/resources/textures/images/background.png index cfecaea36ac9953b10720b8cee301e0501b75064..95ddedbae000b1a92ebeee73d0dbd68038d1e53a 100644 Binary files a/src/main/resources/textures/images/background.png and b/src/main/resources/textures/images/background.png differ diff --git a/src/test/java/MusicPlayerTest.java b/src/test/java/MusicPlayerTest.java new file mode 100644 index 0000000000000000000000000000000000000000..b56177a78e498e6c0a299da7d9be5da207d9068c --- /dev/null +++ b/src/test/java/MusicPlayerTest.java @@ -0,0 +1,26 @@ +import de.hdm_stuttgart.battlearena.Controller.Enum.GameState; +import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.Persistence; +import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.RuntimeInfo; +import de.hdm_stuttgart.battlearena.Model.Sound.MusicPlayer; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +public class MusicPlayerTest { + private static final Logger log = LogManager.getLogger(MusicPlayerTest.class); + + RuntimeInfo runtimeInfo; + MusicPlayer musicPlayer; + @BeforeEach + void setup(){ + musicPlayer = MusicPlayer.getInstance(); + runtimeInfo = RuntimeInfo.getInstance(); + } + + @Test + void startGameStateMonitoringTest(){ + runtimeInfo.setGameState(GameState.MENU); + musicPlayer.startGameStateMonitoring(); + } +}