From de52d82dc62db5d6883cf870a2c3cdc08a178b4f Mon Sep 17 00:00:00 2001 From: Physick <96335032+DegustatorPonos@users.noreply.github.com> Date: Tue, 7 Jul 2026 16:04:29 +0500 Subject: Scene stack logic --- src/scenes/sceneManager.c | 47 +++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 39 insertions(+), 8 deletions(-) (limited to 'src/scenes/sceneManager.c') diff --git a/src/scenes/sceneManager.c b/src/scenes/sceneManager.c index 4d42ed9..bb70864 100644 --- a/src/scenes/sceneManager.c +++ b/src/scenes/sceneManager.c @@ -1,14 +1,45 @@ #include "scenes.h" +#include +#include -void UpdateScene(enum SCENE scene) { - switch (scene) { - case MAIN_MENU: MainMenuUpdate(); - } +Scene **sceneStack = NULL; +uint sceneStackDepth = 0; + +Scene *getCurrentScene() { + if (sceneStackDepth == 0) return false; + return sceneStack[sceneStackDepth - 1]; +} + +bool InitSceneStack() { + sceneStack = malloc(sizeof(Scene) * SCENE_STACK_SIZE); + return sceneStack != NULL; +} + +bool AddScene(Scene *newScene) { + if (newScene == NULL || sceneStackDepth == SCENE_STACK_SIZE) + return false; + + sceneStack[sceneStackDepth] = newScene; + sceneStackDepth += 1; + + return true; } -void DrawScene(enum SCENE scene) { - switch (scene) { - case MAIN_MENU: MainMenuDraw(); - } +void DeleteSceneFromStack() { + Scene *currentScene = getCurrentScene(); + if (currentScene == NULL) return; + currentScene->Deint(currentScene); + sceneStack[--sceneStackDepth] = NULL; } +bool DrawScene() { + Scene *currentScene = getCurrentScene(); + if (currentScene == NULL) return false; + return currentScene->Draw(currentScene); +} + +bool UpdateScene() { + Scene *currentScene = getCurrentScene(); + if (currentScene == NULL) return false; + return currentScene->Update(currentScene); +} -- cgit v1.3