ShitEngine
基于 C++20 与 SDL3 的轻量级 2D 游戏引擎
载入中...
搜索中...
未找到
SceneManager.h
浏览该文件的文档.
1#pragma once
2#include "../Core/Core.h"
3
4namespace Shit {
5 class Scene; // 前向声明
6
19 class SHIT_API SceneManager final {
20 public:
21
22 // 禁止拷贝和移动
23 SceneManager(const SceneManager&) = delete;
27
28 // --- 静态API ---
30 inline static void Update() { GetInstance().update(); }
31 inline static void Destroy() { GetInstance().destroy(); }
32 inline static void PushScene(std::unique_ptr<Scene>&& scene) { GetInstance().pushScene(std::move(scene)); }
33 inline static void PopScene() { GetInstance().popScene(); }
34 inline static void ClearScene() { GetInstance().clearScene(); }
35 inline static void ReplaceScene(std::unique_ptr<Scene>&& scene) { GetInstance().replaceScene(std::move(scene)); }
36
37 private:
38 explicit SceneManager();
40
41 void pushScene(std::unique_ptr<Scene>&& scene);
42 void popScene();
43 void clearScene();
44 void replaceScene(std::unique_ptr<Scene>&& scene);
45
46 void update();
47 void destroy();
48
49 void processPendingActions();
50 void processPushScene(std::unique_ptr<Scene>&& scene);
51 void processPopScene();
52 void processClearScene();
53 void processReplaceScene(std::unique_ptr<Scene>&& scene);
54
55 Scene* getCurrentScene() const;
56
57 enum class StackAction { None, Push, Pop, Clear, Replace };
58 struct PendingAction {
59 StackAction action;
60 std::unique_ptr<Scene> scene;
61 };
62
63 std::vector<std::unique_ptr<Scene>> m_sceneStack;
64 std::vector<PendingAction> m_pendingActions;
65 };
66}
#define SHIT_API
定义 Core.h:12
场景类
定义 Scene.h:34
场景管理器(单例)
定义 SceneManager.h:19
SceneManager & operator=(const SceneManager &)=delete
static void ReplaceScene(std::unique_ptr< Scene > &&scene)
替换栈顶场景
定义 SceneManager.h:35
static void Update()
更新当前场景
定义 SceneManager.h:30
SceneManager(const SceneManager &)=delete
static void Destroy()
销毁所有场景
定义 SceneManager.h:31
static void PopScene()
弹出栈顶场景(下个帧循环生效)
定义 SceneManager.h:33
static void PushScene(std::unique_ptr< Scene > &&scene)
压入新场景(下个帧循环生效)
定义 SceneManager.h:32
SceneManager(SceneManager &&)=delete
static void ClearScene()
清空场景栈
定义 SceneManager.h:34
static SceneManager & GetInstance()
SceneManager & operator=(SceneManager &&)=delete
定义 AudioPlayer.h:9