Extra2D/include/app/application.h

125 lines
2.2 KiB
C
Raw Normal View History

2026-02-11 19:40:26 +08:00
#pragma once
#include <string>
#include <types/base/types.h>
2026-02-11 19:40:26 +08:00
namespace extra2d {
/**
* @brief
*/
2026-02-11 19:40:26 +08:00
struct AppConfig {
std::string title = "Extra2D Application";
int32 width = 1280;
int32 height = 720;
bool fullscreen = false;
bool resizable = true;
bool vsync = true;
int32 fpsLimit = 0;
int32 glMajor = 3;
int32 glMinor = 3;
bool enableCursors = true;
bool enableDpiScale = false;
2026-02-11 19:40:26 +08:00
};
/**
* @brief
*
*
*/
2026-02-11 19:40:26 +08:00
class Application {
public:
/**
* @brief
*/
static Application& instance();
2026-02-11 19:40:26 +08:00
Application(const Application&) = delete;
Application& operator=(const Application&) = delete;
2026-02-11 19:40:26 +08:00
/**
* @brief
*/
bool init(const AppConfig& config);
/**
* @brief
*/
void shutdown();
/**
* @brief
*/
void run();
/**
* @brief 退
*/
void quit();
2026-02-11 19:40:26 +08:00
/**
* @brief
*/
void pause();
/**
* @brief
*/
void resume();
/**
* @brief
*/
bool isPaused() const { return paused_; }
/**
* @brief
*/
bool isRunning() const { return running_; }
2026-02-11 19:40:26 +08:00
/**
* @brief
*/
float deltaTime() const { return deltaTime_; }
/**
* @brief
*/
float totalTime() const { return totalTime_; }
/**
* @brief FPS
*/
int32 fps() const { return currentFps_; }
/**
* @brief
*/
const AppConfig& getConfig() const { return config_; }
2026-02-11 19:40:26 +08:00
private:
Application() = default;
~Application();
2026-02-11 19:40:26 +08:00
void mainLoop();
void update();
2026-02-11 19:40:26 +08:00
AppConfig config_;
2026-02-11 19:40:26 +08:00
bool initialized_ = false;
bool running_ = false;
bool paused_ = false;
bool shouldQuit_ = false;
2026-02-11 19:40:26 +08:00
float deltaTime_ = 0.0f;
float totalTime_ = 0.0f;
double lastFrameTime_ = 0.0;
int32 frameCount_ = 0;
float fpsTimer_ = 0.0f;
int32 currentFps_ = 0;
2026-02-11 19:40:26 +08:00
};
#define APP extra2d::Application::instance()
2026-02-11 19:40:26 +08:00
} // namespace extra2d