#pragma once #include "state_manager.h" #include "memory.h" #include "window.h" #include "event.h" #include "log.h" #include "engine/engine.h" namespace Donut { class VulkanRenderer; 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; } StateManager& get_state_manager() { return *m_state_manager; } Engine& get_engine() { return *m_engine; } static Application& get() { return *s_instance; } private: void on_init(); void on_shutdown(); void on_update(); void on_render(); void on_event(Event& event); void setup_docking_layout(); void build_vulkan_ui(); private: Scope m_state_manager; Scope m_window; Scope m_engine; Scope m_vulkan_renderer; bool m_running; bool m_minimized; float m_delta_time = 0.0f; float m_last_frame = 0.0f; static Application* s_instance; }; }