game_dispatch.hpp 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. //
  2. // game_dispatch.hpp
  3. // gameutils
  4. //
  5. // Created by Sam Jaffe on 9/2/16.
  6. //
  7. #pragma once
  8. #include <chrono>
  9. #include <memory>
  10. #include <unordered_map>
  11. #include "game/math/math_fwd.hpp"
  12. #include "vector/vector.hpp"
  13. #include "engine_fwd.hpp"
  14. #include "events.hpp"
  15. #include "game/graphics/graphics_fwd.h"
  16. #include "game/util/time.hpp"
  17. namespace engine {
  18. class game_dispatch {
  19. public:
  20. using scene_t = std::shared_ptr<scene>;
  21. public:
  22. game_dispatch(std::shared_ptr<graphics::renderer> renderer);
  23. ~game_dispatch();
  24. void process_key_event(raw_key_t key, bool press);
  25. void process_mouse_event(math::vec2 click, bool press);
  26. graphics::manager const & graphics_manager() const;
  27. bool is_running() const { return running; }
  28. void quit() { running = false; }
  29. public:
  30. void update();
  31. void render();
  32. std::shared_ptr<graphics::renderer> make_renderer(math::vec2 const &) const;
  33. void register_scene(scene_t scn);
  34. void activate_scene(scene_id_t const & id);
  35. void set_current_timestamp();
  36. void set_target_fps(env::clock::duration fps) {
  37. minimum_frame_duration_ = fps;
  38. }
  39. private:
  40. env::clock::tick next_frame();
  41. private:
  42. math::vec2 screen_size_;
  43. std::shared_ptr<graphics::renderer> renderer_, batch_renderer_;
  44. env::clock::duration minimum_frame_duration_;
  45. std::shared_ptr<text_engine> text_engine_;
  46. std::unique_ptr<fps_counter> counter_;
  47. std::unordered_map<scene_id_t, scene_t> scenes_;
  48. bool running = true;
  49. env::clock::timestamp current_timestamp;
  50. struct current_scene_info {
  51. current_scene_info();
  52. current_scene_info(scene_t);
  53. scene_t ptr;
  54. std::string current_scene_id; // metadata
  55. math::vec2 local_size; // metadata
  56. bool is_mouse_event;
  57. bool is_keyboard_event;
  58. } current_scene_;
  59. };
  60. }