#pragma once #include #include #include #include struct GLFWwindow; namespace hex::init { class WindowSplash { public: WindowSplash(int &argc, char **&argv); ~WindowSplash(); bool loop(); void addStartupTask(std::string_view taskName, const std::function &task) { this->m_tasks.emplace_back(taskName, task); } private: GLFWwindow *m_window; std::mutex m_progressMutex; float m_progress = 0; std::string m_currTaskName; float m_globalScale = 1.0F; void initGLFW(); void initImGui(); void deinitGLFW(); void deinitImGui(); std::future processTasksAsync(); std::vector>> m_tasks; }; }