- 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
48 lines
1.4 KiB
C++
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
|