Browse Source

Helper functions for engine linkup

Sam Jaffe 6 years ago
parent
commit
f0f3b23bfb

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

@@ -27,6 +27,7 @@ namespace engine {
 
     void process_key_event(raw_key_t key, bool press);
     void process_mouse_event(math::vec2 click, bool press);
+    graphics::manager const & graphics_manager() const;
 
     bool is_running() const { return running; }
     void quit() { running = false; }

+ 2 - 1
engine/include/game/engine/scene.hpp

@@ -21,7 +21,7 @@
 namespace engine {
   class scene : public identity<scene, std::string> {
   public:
-    scene(std::string const &);
+    scene(std::string const &, std::shared_ptr<game_dispatch>);
     virtual ~scene();
 
     virtual void update(float delta) = 0;
@@ -33,6 +33,7 @@ namespace engine {
     key_binding const & keys() const;
 
   protected:
+    graphics::manager const & graphics_manager() const;
     void change_scene(std::string const & scene_id);
     void check_collisions();
     static void check_collisions(std::vector<entity *> const & from,

+ 4 - 0
engine/src/game_dispatch.cpp

@@ -39,6 +39,10 @@ namespace engine {
   game_dispatch::current_scene_info::current_scene_info(scene * curr)
       : ptr(curr), current_scene_id(ptr->id), local_size(ptr->size()) {}
 
+  graphics::manager const & game_dispatch::graphics_manager() const {
+    return *renderer->manager();
+  }
+
   void game_dispatch::process_key_event(raw_key_t key, bool press) {
     if (!curr_scene.is_keyboard_event) return;
     auto const & binding = curr_scene.ptr->keys();

+ 6 - 1
engine/src/scene.cpp

@@ -15,7 +15,8 @@
 
 using namespace engine;
 
-scene::scene(std::string const & str) : identity<scene, std::string>(str) {}
+scene::scene(std::string const & str, std::shared_ptr<game_dispatch> dispatch)
+    : identity<scene, std::string>(str), dispatch_(dispatch) {}
 
 scene::~scene() {}
 
@@ -50,6 +51,10 @@ void scene::check_collisions() {
 //  }
 //}
 
+graphics::manager const & scene::graphics_manager() const {
+  return dispatch_.lock()->graphics_manager();
+}
+
 void scene::handle_key_event(event::key_event evt) {
   if (evt.type & event::PRESSED_MASK && evt.key == keys::QUIT) {
     dispatch_.lock()->quit();