mirror of
https://github.com/antopilo/Nuake.git
synced 2026-09-15 20:08:54 +03:00
Started editor .Net context for undo/redo system
This commit is contained in:
24
Editor/src/ScriptingContext/Modules/EditorModule.cpp
Normal file
24
Editor/src/ScriptingContext/Modules/EditorModule.cpp
Normal file
@@ -0,0 +1,24 @@
|
||||
#include "EditorModule.h"
|
||||
#include "../../Windows/EditorInterface.h"
|
||||
|
||||
void SelectEntity(int entityId)
|
||||
{
|
||||
if (entityId == -1)
|
||||
{
|
||||
Nuake::EditorInterface::Selection = EditorSelection();
|
||||
return;
|
||||
}
|
||||
|
||||
//Nuake::EditorInterface::Selection = EditorSelection(Nuake::Entity{ (entt::entity)entityId, Nuake::Engine::GetCurrentScene().get() });
|
||||
}
|
||||
|
||||
int GetSelectedEntity()
|
||||
{
|
||||
return -10;
|
||||
}
|
||||
|
||||
void EditorNetAPI::RegisterMethods()
|
||||
{
|
||||
RegisterMethod("Editor.SetSelectedEntityIcall", &SelectEntity);
|
||||
RegisterMethod("Editor.GetSelectedEntityIcall", &GetSelectedEntity);
|
||||
}
|
||||
11
Editor/src/ScriptingContext/Modules/EditorModule.h
Normal file
11
Editor/src/ScriptingContext/Modules/EditorModule.h
Normal file
@@ -0,0 +1,11 @@
|
||||
#pragma once
|
||||
#include "src/Scripting/NetModules/NetAPIModule.h"
|
||||
|
||||
class EditorNetAPI : public Nuake::NetAPIModule
|
||||
{
|
||||
public:
|
||||
virtual const std::string GetModuleName() const override { return "Editor"; }
|
||||
|
||||
virtual void RegisterMethods() override;
|
||||
|
||||
};
|
||||
39
Editor/src/ScriptingContext/ScriptingContext.cpp
Normal file
39
Editor/src/ScriptingContext/ScriptingContext.cpp
Normal file
@@ -0,0 +1,39 @@
|
||||
#include "ScriptingContext.h"
|
||||
#include "src/Core/String.h"
|
||||
|
||||
#include "Modules/EditorModule.h"
|
||||
|
||||
void ScriptingContext::Initialize()
|
||||
{
|
||||
m_Modules =
|
||||
{
|
||||
CreateRef<EditorNetAPI>()
|
||||
};
|
||||
|
||||
for (auto& m : m_Modules)
|
||||
{
|
||||
m->RegisterMethods();
|
||||
}
|
||||
|
||||
// Load Nuake assembly DLL
|
||||
auto m_LoadContext2 = Nuake::ScriptingEngineNet::Get().GetHostInstance()->CreateAssemblyLoadContext("NuakeEditorContext");
|
||||
m_NuakeAssembly = Nuake::ScriptingEngineNet::Get().ReloadEngineAPI(m_LoadContext2);
|
||||
m_EditorAssembly = m_LoadContext2.LoadAssembly("EditorNet.dll");
|
||||
|
||||
for (const auto& netModule : m_Modules)
|
||||
{
|
||||
for (const auto& [methodName, methodPtr] : netModule->GetMethods())
|
||||
{
|
||||
auto namespaceClassSplit = Nuake::String::Split(methodName, '.');
|
||||
m_EditorAssembly.AddInternalCall("Nuake." + namespaceClassSplit[0], namespaceClassSplit[1], methodPtr);
|
||||
}
|
||||
}
|
||||
|
||||
m_EditorAssembly.UploadInternalCalls();
|
||||
m_EditorAssembly.GetType("Nuake.Editor").InvokeStaticMethod("Initialize");
|
||||
}
|
||||
|
||||
void ScriptingContext::PushCommand(const std::string & command, const std::string & arg)
|
||||
{
|
||||
m_EditorAssembly.GetType("Nuake.Editor").InvokeStaticMethod("Initialize");
|
||||
}
|
||||
34
Editor/src/ScriptingContext/ScriptingContext.h
Normal file
34
Editor/src/ScriptingContext/ScriptingContext.h
Normal file
@@ -0,0 +1,34 @@
|
||||
#pragma once
|
||||
#include "src/Scripting/NetModules/NetAPIModule.h"
|
||||
|
||||
namespace Coral
|
||||
{
|
||||
class HostInstance;
|
||||
class AssemblyLoadContext;
|
||||
class ManagedAssembly;
|
||||
}
|
||||
|
||||
#include "src/Scripting/ScriptingEngineNet.h"
|
||||
|
||||
class ScriptingContext
|
||||
{
|
||||
private:
|
||||
Coral::HostInstance* m_HostInstance;
|
||||
Coral::AssemblyLoadContext m_LoadContext;
|
||||
|
||||
std::unordered_map<std::string, Coral::AssemblyLoadContext*> m_LoadedAssemblies;
|
||||
std::vector<Ref<Nuake::NetAPIModule>> m_Modules;
|
||||
|
||||
Coral::ManagedAssembly m_NuakeAssembly; // Nuake DLL
|
||||
Coral::ManagedAssembly m_EditorAssembly; // Editor DLL
|
||||
public:
|
||||
static ScriptingContext& Get()
|
||||
{
|
||||
static ScriptingContext instance;
|
||||
return instance;
|
||||
}
|
||||
|
||||
void Initialize();
|
||||
|
||||
void PushCommand(const std::string& command, const std::string& arg);
|
||||
};
|
||||
Reference in New Issue
Block a user