Вынес рендер в отдельный модуль. Сделал систему вызовов для модулй к ядру. Исправил баг в SaveMap. Убрал поддержку linux, так как трудно поддерживать обе платформы. Убрал тесты для linux.

This commit is contained in:
Jiga228
2025-09-15 19:13:39 +07:00
parent 9bf9d678f7
commit f15c8b09cd
18 changed files with 193 additions and 227 deletions
+23 -34
View File
@@ -3,14 +3,18 @@
#include <mutex>
#include <thread>
ModuleInstance::ModuleInstance(CoreInstance& core) : core_(core)
{
// Init instance
}
#include "Core/CoreCallBacks.h"
extern ModuleInstance* Factory();
static std::mutex mModuleInstance;
static ModuleInstance* module = nullptr;
static std::thread* moduleThread;
// Don't free. It's memory free in core
static CoreCallBacks* callbacks_;
void ModuleInstance::start()
{
// Create thread
}
void ModuleInstance::stop()
@@ -18,51 +22,36 @@ void ModuleInstance::stop()
onStop.Call();
}
extern ModuleInstance* Factory(CoreInstance&);
static std::mutex mModuleInstance;
static ModuleInstance* module = nullptr;
static std::thread* moduleThread;
void InitModule(CoreInstance& core)
void ModuleInstance::QuitGame()
{
mModuleInstance.lock();
callbacks_->Quit();
}
void InitModule(CoreCallBacks* callbacks)
{
std::lock_guard<std::mutex> lock(mModuleInstance);
callbacks_ = callbacks;
if(module == nullptr)
module = Factory(core);
mModuleInstance.unlock();
module = Factory();
}
void StartModule()
{
mModuleInstance.lock();
std::lock_guard<std::mutex> lock(mModuleInstance);
if (module != nullptr)
moduleThread = new std::thread([&] {module->start(); });
mModuleInstance.unlock();
}
void StopModule()
{
mModuleInstance.lock();
if(module != nullptr)
{
delete module;
module = nullptr;
moduleThread->detach();
delete moduleThread;
}
mModuleInstance.unlock();
moduleThread = new std::thread(&ModuleInstance::start, module);
}
void QuitModule()
{
mModuleInstance.lock();
std::lock_guard<std::mutex> lock(mModuleInstance);
if(module != nullptr)
{
module->stop();
moduleThread->join();
delete module;
module = nullptr;
delete moduleThread;
moduleThread = nullptr;
}
mModuleInstance.unlock();
}