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