/* * author: Patrick-Christopher Mattulat * e-mail: webmaster@lynarstudios.com */ #include #include #include #include #include using ls::atlantis::cycle::Engine; using ls::atlantis::cycle::EngineParameter; using ls::atlantis::cycle::EngineRuntimeData; using ls::atlantis::factory::KeyboardFactory; using ls::atlantis::factory::WindowApiEventManagerFactory; using ls::atlantis::factory::WindowApiFactory; using ls::atlantis::interfaces::AStatusCode; using ls::atlantis::messaging::StatusCodeOk; using ::std::make_shared; using ::std::shared_ptr; Engine::Engine(const EngineParameter &_parameter) : data(make_shared()), parameter(_parameter) { this->data->setIsUp(true); } Engine::~Engine() = default; void Engine::beginFrame() const { this->data->getWindowApiEventManager()->manage(this->data->getKeyboard()); } void Engine::endFrame() const { this->data->getKeyboard()->reset(); } shared_ptr Engine::getData() const { return this->data; } AStatusCode Engine::init() const { AStatusCode result = _initWindowApi(); if (result.getCode() == StatusCodeOk{}.getCode()) { result = this->_initKeyboard(); } if (result.getCode() == StatusCodeOk{}.getCode()) { result = this->_initEventManager(); } return result; } bool Engine::isRunning() const { return this->data->getIsUp(); } void Engine::quit() const { this->data->setIsUp(false); } AStatusCode Engine::_initEventManager() const { const auto eventManager = WindowApiEventManagerFactory::build(this->parameter.getWindowApiType()); this->data->setWindowApiEventManager(eventManager); return StatusCodeOk{}; } AStatusCode Engine::_initKeyboard() const { const auto keyboard = KeyboardFactory::build(this->parameter.getWindowApiType()); this->data->setKeyboard(keyboard); return StatusCodeOk{}; } AStatusCode Engine::_initWindowApi() const { const auto windowApi = WindowApiFactory::build(this->parameter.getWindowApiType()); this->data->setWindowApi(windowApi); return windowApi->init(); }