Simplify SceneManager initial scene logic
This commit is contained in:
@@ -1,15 +1,19 @@
|
|||||||
package org.hirw.game;
|
package org.hirw.game;
|
||||||
|
|
||||||
public abstract class Scene {
|
import lombok.Getter;
|
||||||
public final SceneType SCENE_TYPE = SceneType.UNDEFINED;
|
|
||||||
|
|
||||||
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 init();
|
||||||
|
|
||||||
public abstract void update();
|
public abstract void update();
|
||||||
|
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return SCENE_TYPE.toString();
|
return getSceneType().toString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,32 +15,42 @@ public final class SceneManager {
|
|||||||
SceneType.MENU, new SplashScene(),
|
SceneType.MENU, new SplashScene(),
|
||||||
SceneType.GAME, 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() {
|
public static void init() {
|
||||||
setScene(DEFAULT_SCENE_TYPE);
|
setScene(DEFAULT_SCENE_TYPE);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setScene(SceneType sceneType) {
|
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();
|
scene.init();
|
||||||
logSceneChange();
|
logSceneChange();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void update() {
|
public static void update() {
|
||||||
if (scene.SCENE_TYPE == SceneType.UNDEFINED) return;
|
if (scene.getSceneType() == null) return;
|
||||||
|
|
||||||
getScene().update();
|
getScene().update();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void logSceneChange() {
|
private static void logSceneChange() {
|
||||||
SceneType newSceneType = getScene().SCENE_TYPE;
|
SceneType newSceneType = getScene().getSceneType();
|
||||||
String loadedSceneMessage = String.format("Changed to scene '%s'", newSceneType.toString());
|
String loadedSceneMessage = String.format("Changed to scene '%s'", newSceneType.toString());
|
||||||
|
|
||||||
if (newSceneType == SceneType.UNDEFINED) {
|
Log.success("SceneManager", loadedSceneMessage);
|
||||||
Log.warning("SceneManager", loadedSceneMessage);
|
}
|
||||||
} else {
|
|
||||||
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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package org.hirw.game;
|
package org.hirw.game;
|
||||||
|
|
||||||
public enum SceneType {
|
public enum SceneType {
|
||||||
UNDEFINED,
|
|
||||||
SPLASH,
|
SPLASH,
|
||||||
MENU,
|
MENU,
|
||||||
GAME,
|
GAME,
|
||||||
|
|||||||
Reference in New Issue
Block a user