Files
XCEngine/engine/include/XCEngine/Scene/SceneManager.h
ssdfasd 810b0861c5 Docs: Add audio module architecture design document
- Add XCEngine音频模块架构设计.md
- Design audio system following Unity-style architecture
- Include AudioSourceComponent, AudioListenerComponent, AudioClip, AudioMixer
- Document DSP effect system (FFT, Reverb, EQ, Compressor)
- Document 3D spatial audio with HRTF support
- Define IAudioBackend abstraction layer with WASAPI/OpenAL backends
- Outline 5-phase implementation priorities
2026-03-20 19:59:06 +08:00

48 lines
1.4 KiB
C++

#pragma once
#include "Scene.h"
#include <string>
#include <vector>
#include <unordered_map>
#include <functional>
namespace XCEngine {
namespace Components {
class SceneManager {
public:
static SceneManager& Get();
Scene* CreateScene(const std::string& name);
void LoadScene(const std::string& filePath);
void LoadSceneAsync(const std::string& filePath, std::function<void(Scene*)> callback);
void UnloadScene(Scene* scene);
void UnloadScene(const std::string& sceneName);
void SetActiveScene(Scene* scene);
void SetActiveScene(const std::string& sceneName);
Scene* GetActiveScene() const { return m_activeScene; }
Scene* GetScene(const std::string& name) const;
std::vector<Scene*> GetAllScenes() const;
Core::Event<Scene*>& OnSceneLoaded() { return m_onSceneLoaded; }
Core::Event<Scene*>& OnSceneUnloaded() { return m_onSceneUnloaded; }
Core::Event<Scene*>& OnActiveSceneChanged() { return m_onActiveSceneChanged; }
private:
SceneManager() = default;
~SceneManager() = default;
SceneManager(const SceneManager&) = delete;
SceneManager& operator=(const SceneManager&) = delete;
Scene* m_activeScene = nullptr;
std::unordered_map<std::string, std::unique_ptr<Scene>> m_scenes;
Core::Event<Scene*> m_onSceneLoaded;
Core::Event<Scene*> m_onSceneUnloaded;
Core::Event<Scene*> m_onActiveSceneChanged;
};
} // namespace Components
} // namespace XCEngine