#pragma once #include #include #include #include namespace boundard { class Scene; class Game { private: size_t id_cnt; std::string current_scene_name_; std::string pending_scene_; std::unordered_map> scenes_; std::shared_ptr 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); std::shared_ptr scene(const std::string& name) const; std::shared_ptr 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); // 供行为函数调用的切换 API。场景会在主循环的安全时机切换。 bool switch_scene(const std::string& name); void request_scene(const std::string& name); std::string take_scene_request(); }; } // namespace boundard