Вынес рендер в отдельный модуль. Сделал систему вызовов для модулй к ядру. Исправил баг в SaveMap. Убрал поддержку linux, так как трудно поддерживать обе платформы. Убрал тесты для linux.
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user