Просмотр исходного кода

Add support for the registering/activating of scenes in the game.

Sam Jaffe 6 лет назад
Родитель
Сommit
261cbfdcec
2 измененных файлов с 17 добавлено и 3 удалено
  1. 6 1
      engine/include/game/engine/game_dispatch.hpp
  2. 11 2
      engine/src/game_dispatch.cpp

+ 6 - 1
engine/include/game/engine/game_dispatch.hpp

@@ -21,6 +21,9 @@
 
 namespace engine {
   class game_dispatch {
+  public:
+    using scene_t = std::shared_ptr<scene>;
+
   public:
     game_dispatch(std::shared_ptr<graphics::renderer> renderer);
     ~game_dispatch();
@@ -36,6 +39,9 @@ namespace engine {
     void update();
     void render();
 
+    void register_scene(scene_t scn);
+    void activate_scene(scene_id_t const & id);
+
   private:
     env::clock::tick next_frame();
 
@@ -46,7 +52,6 @@ namespace engine {
     std::shared_ptr<text_engine> text_engine_;
     std::unique_ptr<fps_counter> counter;
 
-    using scene_t = std::shared_ptr<scene>;
     std::unordered_map<scene_id_t, scene_t> scenes;
 
     bool running = true;

+ 11 - 2
engine/src/game_dispatch.cpp

@@ -34,6 +34,15 @@ namespace engine {
 
   game_dispatch::~game_dispatch() {}
 
+  void game_dispatch::register_scene(scene_t scn) {
+    scenes.emplace(scn->id, scn);
+  }
+
+  void game_dispatch::activate_scene(scene_id_t const & id) {
+    // TODO: Cleanup
+    curr_scene = current_scene_info(scenes[id].get());
+  }
+
   game_dispatch::current_scene_info::current_scene_info() {}
 
   game_dispatch::current_scene_info::current_scene_info(scene * curr)
@@ -77,7 +86,7 @@ namespace engine {
   void game_dispatch::update() {
     env::clock::tick t = next_frame();
     counter->set_frame_step(t.since);
-    //    curr_scene.ptr->update(std::chrono::duration<float>(t.since).count());
+    curr_scene.ptr->update(std::chrono::duration<float>(t.since).count());
   }
 
   void game_dispatch::render() {
@@ -86,6 +95,6 @@ namespace engine {
     for (auto & obj : counter->glyphs()) {
       batch.draw(obj);
     }
-    //    curr_scene.ptr->render(batch);
+    curr_scene.ptr->render(batch);
   }
 }