#pragma once #include "guid.hpp" #include #include namespace basalt::shared::engine { struct EngineConfig { bool headless; ///< Whether enable headless mode (No Window created). std::uint32_t width; ///< Window width. std::uint32_t height; ///< Window height. guid::Guid deliver; ///< The GUID of deliver. }; enum class EngineStatus { Ready, ///< Engine was allocated but not initialized. Running, ///< Engine has been initialized and running. Stop, ///< Engine is shutdown. }; class IEngine { public: IEngine(); virtual ~IEngine(); public: virtual guid::Guid GetGuid() const; virtual void Startup(EngineConfig&& config); /** * @brief * @return True for active exit. */ virtual bool Tick(); virtual void Shutdown(); protected: EngineConfig config; EngineStatus status; }; } // namespace basalt::shared::engine