74 lines
1.8 KiB
C++
74 lines
1.8 KiB
C++
#include "DeerRender/UIEngine.h"
|
|
#include "DeerRender/UIEngine/UIEngine_ErrorHandle.h"
|
|
#include "DeerRender/UIEngine/UIEngine_Functions.h"
|
|
#include "DeerRender/UIEngine/UIEngine.h"
|
|
#include "DeerRender/UIEngine/DockPanelObject.h"
|
|
|
|
#include "Deer/Log.h"
|
|
#include <vector>
|
|
|
|
#include "angelscript.h"
|
|
#include "scriptbuilder.h"
|
|
#include "scriptstdstring.h"
|
|
|
|
namespace Deer {
|
|
namespace UIEngine {
|
|
asIScriptEngine* scriptEngine = nullptr;
|
|
asIScriptModule* scriptModule = nullptr;
|
|
asIScriptContext* scriptContext = nullptr;
|
|
|
|
std::vector<DockPanelObject> dockPanels;
|
|
DockPanelObject* currentDockPanelExecution = nullptr;
|
|
|
|
bool active = false;
|
|
}
|
|
|
|
void UIEngine::initialize() {
|
|
int err = 0;
|
|
|
|
// If it exist we will reload it
|
|
deinitialize();
|
|
|
|
scriptEngine = asCreateScriptEngine();
|
|
RegisterStdString(scriptEngine);
|
|
|
|
AS_RET_CHECK(scriptEngine->SetMessageCallback(asFUNCTION(Deer::UIEngine::errorCallback), 0, asCALL_CDECL));
|
|
|
|
registerUIEngineFunctions();
|
|
registerDockPanel();
|
|
loadScripts();
|
|
|
|
scriptModule = scriptEngine->GetModule("DeerModule");
|
|
scriptContext = scriptEngine->CreateContext();
|
|
|
|
extractDockPanels();
|
|
|
|
active = true;
|
|
}
|
|
|
|
void UIEngine::deinitialize() {
|
|
dockPanels.clear();
|
|
|
|
if (scriptContext)
|
|
scriptContext->Release();
|
|
if (scriptEngine)
|
|
scriptEngine->ShutDownAndRelease();
|
|
|
|
scriptEngine = nullptr;
|
|
scriptModule = nullptr;
|
|
scriptContext = nullptr;
|
|
|
|
active = false;
|
|
}
|
|
|
|
void UIEngine::execute() {
|
|
if (!active)
|
|
return;
|
|
|
|
for (auto& panel : dockPanels) {
|
|
currentDockPanelExecution = &panel;
|
|
panel.executeRender();
|
|
}
|
|
currentDockPanelExecution = nullptr;
|
|
}
|
|
} |