Add Scene Base Class

This commit is contained in:
2025-12-06 10:25:14 +08:00
parent db87a54e8b
commit c0d67926c4
3 changed files with 53 additions and 0 deletions

20
src/scenes/base/Scene.h Normal file
View File

@@ -0,0 +1,20 @@
// ui/Scene.h - 场景基类
#pragma once
#include <SDL3/SDL.h>
class Scene {
public:
virtual ~Scene() = default;
// 空实现,可选择性重写
virtual void onEnter(){};
virtual void onExit(){};
virtual void update() = 0;
virtual void render(SDL_Renderer* renderer) = 0;
};

View File

@@ -0,0 +1,11 @@
#include "SceneManager.h"
SceneManager::SceneManager() {
}
SceneManager::~SceneManager() {
while (!m_scenes.empty()) {
m_scenes.pop();
}
}

View File

@@ -0,0 +1,22 @@
#pragma once
#include "Scene.h"
#include <string>
#include <stack>
#include <memory>
#include <unordered_map>
class SceneManager {
public:
SceneManager();
~SceneManager();
void PushScene(const std::string& sceneName, std::unique_ptr<Scene> scene);
void PopScene();
void ChangeScene(const std::string& sceneName, std::unique_ptr<Scene> scene);
private:
// 用栈的形式来存储场景
std::stack<std::unique_ptr<Scene>> m_scenes;
std::unordered_map<std::string, std::unique_ptr<Scene>> m_sceneCache;
};