#pragma once #include #include #include "window.h" #include "event.h" #include "state_manager.h" #include "log.h" namespace Donut { class Application { public: Application(const std::string& name = "Donut", int width = 1280, int height = 720); ~Application(); void run(); void close(); Window& get_window() { return *m_window; } static Application& get() { return *s_instance; } private: void on_init(); void on_shutdown(); void on_update(); void on_render(); void on_event(Event& event); private: std::unique_ptr m_state_manager; std::unique_ptr m_window; bool m_running; bool m_minimized; float m_delta_time = 0.0f; float m_last_frame = 0.0f; static Application* s_instance; }; }