legatt 3f965b2393 C++20 migration and Client
- Migrated to C++20 modules
- Worker and ThreadedWorker base classes for interthread systems
- Client class for server transport and converting game data models to render data (views)
- Update provinces render data from Client
- Renderer handles commands now
2026-02-10 04:12:04 +03:00

59 lines
1.3 KiB
C++

module;
#include <GLFW/glfw3.h>
export module Engine;
export import Render;
export import Input;
export import AssetManager;
export import Client;
import allocator;
import worker;
export
{
class Engine
{
public:
inline static GLFWwindow *window;
inline static ee_engine::IInput *input;
inline static AssetManager *assetManager;
inline static ee_engine::IRenderer *renderer;
inline static Client *client;
static void Shutdown()
{
if (input != nullptr)
Deallocate(input);
if (renderer != nullptr)
{
renderer->Shutdown();
Deallocate(renderer);
}
renderer = nullptr;
WaitThreadShutdown(assetManager);
WaitThreadShutdown(client);
glfwDestroyWindow(window);
glfwTerminate();
}
template <ee_utils::IThreadedWorker T>
static void WaitThreadShutdown(T* &thread)
{
if (thread != nullptr)
{
thread->Shutdown();
while(thread->isRunning.load()) {}
Deallocate(thread);
}
thread = nullptr;
}
private:
Engine();
};
}