From 4e23e6a54b1da4cde29206f3230b2fb549fcefe7 Mon Sep 17 00:00:00 2001 From: Antoine Pilote Date: Fri, 13 Oct 2023 01:45:07 -0400 Subject: [PATCH] Now passing strings between c++ -> c# -> c++ --- Nuake/src/Scene/Lighting/Environment.h | 2 +- Nuake/src/Scripting/ScriptingEngineNet.cpp | 40 +++++++++++++++------- Nuake/src/Scripting/ScriptingEngineNet.h | 13 +++++-- NuakeNet/src/main.cs | 5 ++- 4 files changed, 42 insertions(+), 18 deletions(-) diff --git a/Nuake/src/Scene/Lighting/Environment.h b/Nuake/src/Scene/Lighting/Environment.h index 7ea407f2..4382ad53 100644 --- a/Nuake/src/Scene/Lighting/Environment.h +++ b/Nuake/src/Scene/Lighting/Environment.h @@ -64,7 +64,7 @@ namespace Nuake float DOFGain = 100.f; float DOFBias = 0.0f; float DOFFringe = 0.0f; - float DOFNAmmount = 0.0001; + float DOFNAmmount = 0.0001f; float DOFDbSize = 1.25f; float DOFFeather = 1.0f; diff --git a/Nuake/src/Scripting/ScriptingEngineNet.cpp b/Nuake/src/Scripting/ScriptingEngineNet.cpp index 9d9a6219..fbbffd41 100644 --- a/Nuake/src/Scripting/ScriptingEngineNet.cpp +++ b/Nuake/src/Scripting/ScriptingEngineNet.cpp @@ -18,6 +18,26 @@ void ExceptionCallback(std::string_view InMessage) namespace Nuake { + ScriptingEngineNet::ScriptingEngineNet() + { + auto coralDir = ""; + Coral::HostSettings settings = + { + .CoralDirectory = coralDir, + .ExceptionCallback = ExceptionCallback + }; + m_HostInstance = CreateScope(); + m_HostInstance->Initialize(settings); + + m_LoadContext = CreateScope(m_HostInstance->CreateAssemblyLoadContext("NuakeEngineContext")); + } + + ScriptingEngineNet::~ScriptingEngineNet() + { + m_HostInstance->UnloadAssemblyLoadContext(*m_LoadContext); + m_HostInstance->Shutdown(); + } + ScriptingEngineNet& ScriptingEngineNet::Get() { static ScriptingEngineNet instance; @@ -31,23 +51,19 @@ namespace Nuake void ScriptingEngineNet::Initialize() { - auto coralDir = ""; - Coral::HostSettings settings = - { - .CoralDirectory = coralDir, - .ExceptionCallback = ExceptionCallback - }; - Coral::HostInstance hostInstance; - hostInstance.Initialize(settings); - - auto loadContext = hostInstance.CreateAssemblyLoadContext("NuakeEngineContext"); - auto& assembly = loadContext.LoadAssembly("NuakeNet.dll"); + + auto& assembly = m_LoadContext->LoadAssembly("NuakeNet.dll"); assembly.AddInternalCall("Nuake.Net.Engine", "LoggerLogIcall", reinterpret_cast(&Log)); assembly.UploadInternalCalls(); auto& engineType = assembly.GetType("Nuake.Net.Engine"); auto engineInstance = engineType.CreateInstance(); - engineInstance.InvokeMethod("Log"); + + Coral::NativeString param1 = Coral::NativeString::FromUTF8("Hello from CPP");; + engineInstance.InvokeMethod("Log", param1); + + engineInstance.Destroy(); + Coral::GC::Collect(); } } \ No newline at end of file diff --git a/Nuake/src/Scripting/ScriptingEngineNet.h b/Nuake/src/Scripting/ScriptingEngineNet.h index 52a5f766..01f854cb 100644 --- a/Nuake/src/Scripting/ScriptingEngineNet.h +++ b/Nuake/src/Scripting/ScriptingEngineNet.h @@ -1,13 +1,22 @@ #pragma once +#include "src/Core/Core.h" +namespace Coral +{ + class HostInstance; + class AssemblyLoadContext; +} namespace Nuake { class ScriptingEngineNet { private: - ScriptingEngineNet() = default; - ~ScriptingEngineNet() = default; + Scope m_HostInstance; + Scope m_LoadContext; + + ScriptingEngineNet(); + ~ScriptingEngineNet(); public: static ScriptingEngineNet& Get(); diff --git a/NuakeNet/src/main.cs b/NuakeNet/src/main.cs index 018dfebc..62363051 100644 --- a/NuakeNet/src/main.cs +++ b/NuakeNet/src/main.cs @@ -19,10 +19,9 @@ namespace Nuake.Net /// Prints a message to the console log /// /// message to be printed - public void Log() + public void Log(NativeString input) { - NativeString str = "Hello from C#"; - unsafe { LoggerLogIcall(str); } + unsafe { LoggerLogIcall(input + " - hello from c# man"); } } } } \ No newline at end of file