SceneManager in Application integrieren #17

Closed
opened 2026-04-16 20:19:24 +00:00 by sebastian · 0 comments
Owner

Problem: Application kennt nur pushLayer() ohne Rückkehrmöglichkeit. Es gibt keine Möglichkeit, die aktive Scene zu wechseln oder alte Layer zu entfernen.
Lösung:
// engine/scene/SceneManager.h

class SceneManager {
public:
    void switchTo(std::unique_ptr<Scene> next);
    void update();
    void render();

private:
    std::unique_ptr<Scene> current;
    std::unique_ptr<Scene> pending;  // wird am Frame-Anfang aktiviert

    void applyPendingTransition();
};
Application::run() wird:
while (!window->shouldClose()) {
    updateTime();
    window->OnUpdate();

    sceneManager->update();   // ruft current->onUpdate()
    sceneManager->render();   // ruft current->onRender()

    InputManager::update();
    mouse->update();
    keyboard->update();
    stateManager->updateState();
}

Der Wechsel passiert immer zu Beginn eines Frames (kein Switch mitten im Update).
Acceptance Criteria:

  • Application.layers wird durch SceneManager ersetzt
  • SceneManager::switchTo() ruft current->onExit() dann next->onEnter() auf
  • Kein direkter pushLayer()-Aufruf mehr in der Applikation
  • Wechsel ist Frame-sicher (pending-Pattern)
Problem: Application kennt nur pushLayer() ohne Rückkehrmöglichkeit. Es gibt keine Möglichkeit, die aktive Scene zu wechseln oder alte Layer zu entfernen. Lösung: // engine/scene/SceneManager.h ``` class SceneManager { public: void switchTo(std::unique_ptr<Scene> next); void update(); void render(); private: std::unique_ptr<Scene> current; std::unique_ptr<Scene> pending; // wird am Frame-Anfang aktiviert void applyPendingTransition(); }; Application::run() wird: while (!window->shouldClose()) { updateTime(); window->OnUpdate(); sceneManager->update(); // ruft current->onUpdate() sceneManager->render(); // ruft current->onRender() InputManager::update(); mouse->update(); keyboard->update(); stateManager->updateState(); } ``` Der Wechsel passiert immer zu Beginn eines Frames (kein Switch mitten im Update). Acceptance Criteria: - Application.layers wird durch SceneManager ersetzt - SceneManager::switchTo() ruft current->onExit() dann next->onEnter() auf - Kein direkter pushLayer()-Aufruf mehr in der Applikation - Wechsel ist Frame-sicher (pending-Pattern)
sebastian added the
enhancement
engine
labels 2026-04-16 20:19:29 +00:00
sebastian added this to the Scene-Abstraction milestone 2026-04-16 20:19:33 +00:00
sebastian added this to the Dicewars project 2026-04-16 21:02:34 +00:00
Sign in to join this conversation.
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: sebastian/Dicewars-Siedler#17
No description provided.