Engine.cpp 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. /*
  2. * author: Patrick-Christopher Mattulat
  3. * e-mail: webmaster@lynarstudios.com
  4. */
  5. #include <cycle/Engine.hpp>
  6. #include <factory/KeyboardFactory.hpp>
  7. #include <factory/WindowApiEventManagerFactory.hpp>
  8. #include <factory/WindowApiFactory.hpp>
  9. #include <messaging/StatusCodeOk.hpp>
  10. using ls::atlantis::cycle::Engine;
  11. using ls::atlantis::cycle::EngineParameter;
  12. using ls::atlantis::cycle::EngineRuntimeData;
  13. using ls::atlantis::factory::KeyboardFactory;
  14. using ls::atlantis::factory::WindowApiEventManagerFactory;
  15. using ls::atlantis::factory::WindowApiFactory;
  16. using ls::atlantis::interfaces::AStatusCode;
  17. using ls::atlantis::messaging::StatusCodeOk;
  18. using ::std::make_shared;
  19. using ::std::shared_ptr;
  20. Engine::Engine(const EngineParameter &_parameter)
  21. : data(make_shared<EngineRuntimeData>()),
  22. parameter(_parameter)
  23. {
  24. this->data->setIsUp(true);
  25. }
  26. Engine::~Engine() = default;
  27. void Engine::beginFrame() const
  28. {
  29. this->data->getWindowApiEventManager()->manage();
  30. }
  31. void Engine::endFrame() const
  32. {
  33. this->data->getKeyboard()->reset();
  34. }
  35. shared_ptr<EngineRuntimeData> Engine::getData() const
  36. {
  37. return this->data;
  38. }
  39. AStatusCode Engine::init() const
  40. {
  41. AStatusCode result = _initWindowApi();
  42. if (result.getCode() == StatusCodeOk{}.getCode())
  43. {
  44. result = this->_initKeyboard();
  45. }
  46. if (result.getCode() == StatusCodeOk{}.getCode())
  47. {
  48. result = this->_initEventManager();
  49. }
  50. return result;
  51. }
  52. bool Engine::isRunning() const
  53. {
  54. return this->data->getIsUp();
  55. }
  56. void Engine::quit() const
  57. {
  58. this->data->setIsUp(false);
  59. }
  60. AStatusCode Engine::_initEventManager() const
  61. {
  62. const auto eventManager = WindowApiEventManagerFactory::build(this->parameter.getWindowApiType());
  63. this->data->setWindowApiEventManager(eventManager);
  64. return StatusCodeOk{};
  65. }
  66. AStatusCode Engine::_initKeyboard() const
  67. {
  68. const auto keyboard = KeyboardFactory::build(this->parameter.getWindowApiType());
  69. this->data->setKeyboard(keyboard);
  70. return StatusCodeOk{};
  71. }
  72. AStatusCode Engine::_initWindowApi() const
  73. {
  74. const auto windowApi = WindowApiFactory::build(this->parameter.getWindowApiType());
  75. this->data->setWindowApi(windowApi);
  76. return windowApi->init();
  77. }