2026-01-04 16:12:36 +08:00
|
|
|
#pragma once
|
|
|
|
|
#include "basalt_char.hpp"
|
|
|
|
|
#include <string>
|
|
|
|
|
#include <cinttypes>
|
|
|
|
|
|
|
|
|
|
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<BSCHAR> title; ///< Window title.
|
|
|
|
|
std::uint32_t width; ///< Window width.
|
|
|
|
|
std::uint32_t height; ///< Window height.
|
|
|
|
|
};
|
|
|
|
|
|
2026-01-04 17:16:54 +08:00
|
|
|
enum class EngineStatus {
|
|
|
|
|
Ready, ///< Engine was allocated but not initialized.
|
|
|
|
|
Running, ///< Engine has been initialized and running.
|
|
|
|
|
Stop, ///< Engine is shutdown.
|
|
|
|
|
};
|
|
|
|
|
|
2026-01-04 16:12:36 +08:00
|
|
|
class IEngine {
|
|
|
|
|
public:
|
2026-01-04 17:16:54 +08:00
|
|
|
IEngine();
|
2026-01-04 16:12:36 +08:00
|
|
|
virtual ~IEngine();
|
|
|
|
|
|
|
|
|
|
public:
|
2026-01-04 17:16:54 +08:00
|
|
|
virtual void Startup(EngineConfig&& config);
|
|
|
|
|
virtual void Tick();
|
|
|
|
|
virtual void Shutdown();
|
2026-01-04 16:12:36 +08:00
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
EngineConfig config;
|
2026-01-04 17:16:54 +08:00
|
|
|
EngineStatus status;
|
2026-01-04 16:12:36 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
}
|