#pragma once #include "basalt_char.hpp" #include #include namespace Basalt::Shared::Engine { enum class EngineKind { DirectX8, DirectX9, DirectX11, DirectX12, OpenGL, Vulkan, }; struct EngineConfig { bool is_headless; ///< Whether enable headless mode (No Window created). std::basic_string title; ///< Window title. std::uint32_t width; ///< Window width. std::uint32_t height; ///< Window height. }; 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 void Startup(EngineConfig&& config); virtual void Tick(); virtual void Shutdown(); protected: EngineConfig config; EngineStatus status; }; }