diff --git a/src/main/java/org/hirw/game/Scene.java b/src/main/java/org/hirw/game/Scene.java index 2603167..c7b072b 100644 --- a/src/main/java/org/hirw/game/Scene.java +++ b/src/main/java/org/hirw/game/Scene.java @@ -1,15 +1,19 @@ package org.hirw.game; -public abstract class Scene { - public final SceneType SCENE_TYPE = SceneType.UNDEFINED; +import lombok.Getter; - public Scene() {} +public abstract class Scene { + @Getter private final SceneType sceneType; + + public Scene(SceneType sceneType) { + this.sceneType = sceneType; + } public abstract void init(); public abstract void update(); public String toString() { - return SCENE_TYPE.toString(); + return getSceneType().toString(); } } diff --git a/src/main/java/org/hirw/game/SceneManager.java b/src/main/java/org/hirw/game/SceneManager.java index 1265eaf..6ec23a3 100644 --- a/src/main/java/org/hirw/game/SceneManager.java +++ b/src/main/java/org/hirw/game/SceneManager.java @@ -15,32 +15,42 @@ public final class SceneManager { SceneType.MENU, new SplashScene(), SceneType.GAME, new SplashScene())); - @Getter private static Scene scene = SCENES.get(DEFAULT_SCENE_TYPE); + @Getter private static Scene scene; public static void init() { setScene(DEFAULT_SCENE_TYPE); } public static void setScene(SceneType sceneType) { - scene = SCENES.get(sceneType); + Scene newScene = SCENES.get(sceneType); + + if (scene == newScene) { + Log.warning("SceneManager", sameSceneWarningString()); + return; + } else { + scene = newScene; + } + scene.init(); logSceneChange(); } public static void update() { - if (scene.SCENE_TYPE == SceneType.UNDEFINED) return; + if (scene.getSceneType() == null) return; getScene().update(); } private static void logSceneChange() { - SceneType newSceneType = getScene().SCENE_TYPE; + SceneType newSceneType = getScene().getSceneType(); String loadedSceneMessage = String.format("Changed to scene '%s'", newSceneType.toString()); - if (newSceneType == SceneType.UNDEFINED) { - Log.warning("SceneManager", loadedSceneMessage); - } else { - Log.success("SceneManager", loadedSceneMessage); - } + Log.success("SceneManager", loadedSceneMessage); + } + + private static String sameSceneWarningString() { + return String.format( + "Tried to switch to scene '%s' but that scene is already loaded", + scene.getSceneType().toString()); } } diff --git a/src/main/java/org/hirw/game/SceneType.java b/src/main/java/org/hirw/game/SceneType.java index 1673ab7..fc21bb8 100644 --- a/src/main/java/org/hirw/game/SceneType.java +++ b/src/main/java/org/hirw/game/SceneType.java @@ -1,7 +1,6 @@ package org.hirw.game; public enum SceneType { - UNDEFINED, SPLASH, MENU, GAME,