Started editor .Net context for undo/redo system

This commit is contained in:
Antoine Pilote
2024-08-25 22:42:07 -04:00
parent 03231e6bf7
commit 9a30925b34
18 changed files with 531 additions and 28 deletions

View 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);
}

View 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;
};

View 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");
}

View 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);
};