Files
2026-08-17 10:26:27 +08:00

48 lines
1.3 KiB
C++

#pragma once
#include <cstddef>
#include <memory>
#include <string>
#include <unordered_map>
namespace boundard {
class Scene;
class Game {
private:
size_t id_cnt;
std::string current_scene_name_;
std::string pending_scene_;
std::unordered_map<std::string, std::shared_ptr<Scene>> scenes_;
std::shared_ptr<Scene> current_scene_;
public:
Game();
~Game();
Game(const Game&) = delete;
Game& operator=(const Game&) = delete;
Game(Game&&) noexcept = delete;
Game& operator=(Game&&) noexcept = delete;
static Game& getInstance();
void launch();
size_t new_id();
// 场景注册与查询。
void add_scene(std::shared_ptr<Scene> scene);
std::shared_ptr<Scene> scene(const std::string& name) const;
std::shared_ptr<Scene> current_scene() const;
const std::string& current_scene_name() const;
bool has_scene(const std::string& name) const;
// 引擎在安全时机调用,把目标场景设为当前场景。
void set_current_scene(std::shared_ptr<Scene> scene);
// 供行为函数调用的切换 API。场景会在主循环的安全时机切换。
bool switch_scene(const std::string& name);
void request_scene(const std::string& name);
std::string take_scene_request();
};
} // namespace boundard