mirror of
https://github.com/antopilo/Nuake.git
synced 2026-01-03 14:09:46 +03:00
Added ability to get other instances of .net scripts using GetEntity<T>
This commit is contained in:
@@ -21,6 +21,7 @@
|
||||
#include "src/Scene/Components/QuakeMap.h"
|
||||
|
||||
#include "src/Physics/PhysicsManager.h"
|
||||
#include "src/Scripting/ScriptingEngineNet.h"
|
||||
|
||||
#include <Coral/Array.hpp>
|
||||
|
||||
@@ -38,6 +39,24 @@ namespace Nuake {
|
||||
return scene->GetEntity(entityName).GetHandle();
|
||||
}
|
||||
|
||||
Coral::ManagedObject GetEntityScript(Coral::String entityName)
|
||||
{
|
||||
auto scene = Engine::GetCurrentScene();
|
||||
if (!scene->EntityExists(entityName))
|
||||
{
|
||||
return Coral::ManagedObject(); // Error code: entity not found.
|
||||
}
|
||||
|
||||
Entity entity = scene->GetEntity(entityName);
|
||||
|
||||
auto& scriptingEngine = ScriptingEngineNet::Get();
|
||||
if (scriptingEngine.HasEntityScriptInstance(entity))
|
||||
{
|
||||
auto instance = scriptingEngine.GetEntityScript(entity);
|
||||
return instance;
|
||||
}
|
||||
}
|
||||
|
||||
static enum ComponentTypes
|
||||
{
|
||||
Unknown = -1,
|
||||
@@ -216,6 +235,7 @@ namespace Nuake {
|
||||
{
|
||||
RegisterMethod("Entity.EntityHasComponentIcall", &EntityHasComponent);
|
||||
RegisterMethod("Scene.GetEntityIcall", &GetEntity);
|
||||
RegisterMethod("Scene.GetEntityScriptIcall", &GetEntityScript);
|
||||
|
||||
// Components
|
||||
RegisterMethod("TransformComponent.SetPositionIcall", &TransformSetPosition);
|
||||
|
||||
@@ -117,7 +117,7 @@ namespace Nuake
|
||||
void ScriptingEngineNet::LoadProjectAssembly(Ref<Project> project)
|
||||
{
|
||||
const std::string sanitizedProjectName = String::Sanitize(project->Name);
|
||||
const std::string assemblyPath = "/bin/Debug/net7.0/" + sanitizedProjectName + ".dll";
|
||||
const std::string assemblyPath = "/bin/Debug/net8.0/" + sanitizedProjectName + ".dll";
|
||||
|
||||
if (!FileSystem::FileExists(assemblyPath))
|
||||
{
|
||||
@@ -223,6 +223,8 @@ namespace Nuake
|
||||
{
|
||||
if (!HasEntityScriptInstance(entity))
|
||||
{
|
||||
std::string name = entity.GetComponent<NameComponent>().Name;
|
||||
Logger::Log(name);
|
||||
Logger::Log("Failed to get entity .Net script instance, doesn't exist", ".net", CRITICAL);
|
||||
return Coral::ManagedObject();
|
||||
}
|
||||
@@ -266,10 +268,10 @@ namespace Nuake
|
||||
const std::string cleanProjectName = String::Sanitize(projectName);
|
||||
const std::string premakeScript = R"(
|
||||
workspace ")" + cleanProjectName + R"("
|
||||
configurations { "Debug", "Release" }
|
||||
project ")" + cleanProjectName + R"("
|
||||
language "C#"
|
||||
dotnetframework "net7.0"
|
||||
|
||||
dotnetframework "net8.0"
|
||||
kind "SharedLib"
|
||||
clr "Unsafe"
|
||||
|
||||
|
||||
@@ -6,6 +6,21 @@ namespace Nuake.Net
|
||||
public class Scene
|
||||
{
|
||||
internal static unsafe delegate*<NativeString, int> GetEntityIcall;
|
||||
internal static unsafe delegate*<NativeString, NativeInstance<Entity>> GetEntityScriptIcall;
|
||||
|
||||
public static T? GetEntity<T>(string entityName) where T : class
|
||||
{
|
||||
NativeInstance<Entity> handle;
|
||||
unsafe { handle = GetEntityScriptIcall(entityName); }
|
||||
|
||||
Entity? entity = handle.Get();
|
||||
if (entity != null && entity is T)
|
||||
{
|
||||
return entity as T;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public static Entity GetEntity(string entityName)
|
||||
{
|
||||
|
||||
72
premake5.lua
72
premake5.lua
@@ -1,5 +1,6 @@
|
||||
workspace "Nuake"
|
||||
conformancemode "On"
|
||||
architecture "x64"
|
||||
|
||||
configurations
|
||||
{
|
||||
"Debug",
|
||||
@@ -19,12 +20,6 @@ workspace "Nuake"
|
||||
"NK_DEBUG"
|
||||
}
|
||||
|
||||
filter { "language:C++" }
|
||||
architecture "x64"
|
||||
|
||||
filter { "language:C" }
|
||||
architecture "x64"
|
||||
|
||||
outputdir = "%{cfg.buildcfg}-%{cfg.system}-%{cfg.architecture}"
|
||||
|
||||
include "Nuake/dependencies/glfw_p5.lua"
|
||||
@@ -34,9 +29,6 @@ include "Nuake/dependencies/freetype_p5.lua"
|
||||
include "Nuake/dependencies/jolt_p5.lua"
|
||||
include "Nuake/dependencies/soloud_p5.lua"
|
||||
include "Nuake/dependencies/optick_p5.lua"
|
||||
include "Nuake/dependencies/coral_p5.lua"
|
||||
|
||||
include "NuakeNet/premake5.lua"
|
||||
|
||||
project "Nuake"
|
||||
location "Nuake"
|
||||
@@ -88,8 +80,7 @@ project "Nuake"
|
||||
"%{prj.name}/src/Vendors/wren/src/include",
|
||||
"%{prj.name}/src/Vendors/incbin",
|
||||
"%{prj.name}/dependencies/build",
|
||||
"%{prj.name}/dependencies/soloud/include",
|
||||
"%{prj.name}/dependencies/Coral/Coral.Native/Include"
|
||||
"%{prj.name}/dependencies/soloud/include"
|
||||
}
|
||||
|
||||
links
|
||||
@@ -99,16 +90,15 @@ project "Nuake"
|
||||
}
|
||||
|
||||
filter "system:linux"
|
||||
defines
|
||||
{
|
||||
defines {
|
||||
"GLFW_STATIC",
|
||||
"NK_LINUX"
|
||||
}
|
||||
|
||||
links
|
||||
{
|
||||
"glib-2.0"
|
||||
}
|
||||
{
|
||||
"glib-2.0"
|
||||
}
|
||||
|
||||
buildoptions { "`pkg-config --cflags glib-2.0 pango gdk-pixbuf-2.0 atk`" }
|
||||
linkoptions { "`pkg-config --libs glib-2.0 pango gdk-pixbuf-2.0`" }
|
||||
@@ -117,7 +107,7 @@ project "Nuake"
|
||||
{
|
||||
"/usr/include/gtk-3.0/",
|
||||
"/usr/lib/glib-2.0/include",
|
||||
"/usr/include/glib-2.0",
|
||||
"/usr/include/glib-2.0",
|
||||
}
|
||||
|
||||
filter "system:windows"
|
||||
@@ -127,7 +117,7 @@ project "Nuake"
|
||||
"NK_WIN"
|
||||
}
|
||||
|
||||
|
||||
buildoptions { "-permissive", "-cxxflags", "gtk+-3.0"}
|
||||
filter "configurations:Debug"
|
||||
runtime "Debug"
|
||||
symbols "on"
|
||||
@@ -179,8 +169,7 @@ project "NuakeRuntime"
|
||||
"%{prj.name}/../Nuake/src/Vendors/msdfgen",
|
||||
"%{prj.name}/../Nuake/src/Vendors/wren/src/include",
|
||||
"%{prj.name}/../Nuake/dependencies/JoltPhysics/bin/%{cfg.buildcfg}-%{cfg.system}-%{cfg.architecture}/JoltPhysics/",
|
||||
"%{prj.name}/../Nuake/dependencies/soloud/bin/%{cfg.buildcfg}-%{cfg.system}-%{cfg.architecture}",
|
||||
"%{prj.name}/../Nuake/dependencies/Coral/NetCore/"
|
||||
"%{prj.name}/../Nuake/dependencies/soloud/bin/%{cfg.buildcfg}-%{cfg.system}-%{cfg.architecture}"
|
||||
}
|
||||
|
||||
links
|
||||
@@ -191,8 +180,7 @@ project "NuakeRuntime"
|
||||
"assimp",
|
||||
"Freetype",
|
||||
"JoltPhysics",
|
||||
"soloud",
|
||||
"Coral.Native",
|
||||
"soloud"
|
||||
}
|
||||
|
||||
filter "system:windows"
|
||||
@@ -206,12 +194,6 @@ project "NuakeRuntime"
|
||||
"opengl32.lib"
|
||||
}
|
||||
|
||||
externalincludedirs { "%{prj.name}/../Nuake/dependencies/Coral/Coral.Native/Include/" }
|
||||
|
||||
postbuildcommands {
|
||||
'{COPYFILE} "%{wks.location}/Nuake/dependencies/Coral/Coral.Managed/Coral.Managed.runtimeconfig.json" "%{wks.location}/%{prj.name}"'
|
||||
}
|
||||
|
||||
filter "system:linux"
|
||||
links
|
||||
{
|
||||
@@ -230,7 +212,7 @@ project "NuakeRuntime"
|
||||
{
|
||||
"/usr/include/gtk-3.0/",
|
||||
"/usr/lib/glib-2.0/include",
|
||||
"/usr/include/glib-2.0",
|
||||
"/usr/include/glib-2.0",
|
||||
}
|
||||
|
||||
buildoptions { "`pkg-config --cflags glib-2.0 pango gdk-pixbuf-2.0 gtk-3 atk tk-3.0 glib-2.0`" }
|
||||
@@ -297,7 +279,7 @@ project "Editor"
|
||||
"%{prj.name}/../Nuake/dependencies/JoltPhysics",
|
||||
"%{prj.name}/../Nuake/dependencies/build",
|
||||
"%{prj.name}/../Nuake/dependencies/soloud/include",
|
||||
"/usr/include/gtk-3.0/",
|
||||
"/usr/include/gtk-3.0/"
|
||||
}
|
||||
|
||||
libdirs
|
||||
@@ -311,8 +293,7 @@ project "Editor"
|
||||
"%{prj.name}/../Nuake/src/Vendors/msdfgen",
|
||||
"%{prj.name}/../Nuake/src/Vendors/wren/src/include",
|
||||
"%{prj.name}/../Nuake/dependencies/JoltPhysics/bin/%{cfg.buildcfg}-%{cfg.system}-%{cfg.architecture}/JoltPhysics/",
|
||||
"%{prj.name}/../Nuake/dependencies/soloud/bin/%{cfg.buildcfg}-%{cfg.system}-%{cfg.architecture}",
|
||||
"%{prj.name}/../Nuake/dependencies/Coral/NetCore/"
|
||||
"%{prj.name}/../Nuake/dependencies/soloud/bin/%{cfg.buildcfg}-%{cfg.system}-%{cfg.architecture}"
|
||||
}
|
||||
|
||||
links
|
||||
@@ -321,10 +302,9 @@ project "Editor"
|
||||
"glad",
|
||||
"GLFW",
|
||||
"assimp",
|
||||
"Freetype",
|
||||
"JoltPhysics",
|
||||
"soloud",
|
||||
"Coral.Native"
|
||||
"Freetype",
|
||||
"JoltPhysics",
|
||||
"soloud"
|
||||
}
|
||||
|
||||
filter "system:Windows"
|
||||
@@ -341,13 +321,6 @@ project "Editor"
|
||||
{
|
||||
"NK_WIN"
|
||||
}
|
||||
|
||||
externalincludedirs { "%{prj.name}/../Nuake/dependencies/Coral/Coral.Native/Include/" }
|
||||
|
||||
postbuildcommands {
|
||||
'{COPYFILE} "%{wks.location}/Nuake/dependencies/Coral/Coral.Managed/Coral.Managed.runtimeconfig.json" "%{wks.location}/%{prj.name}"',
|
||||
'{COPYFILE} "%{wks.location}/Nuake/dependencies/Coral/Coral.Managed/bin/%{cfg.buildcfg}/Coral.Managed.dll" "%{wks.location}/%{prj.name}"'
|
||||
}
|
||||
|
||||
|
||||
filter "system:linux"
|
||||
@@ -360,8 +333,8 @@ project "Editor"
|
||||
"asound",
|
||||
"glib-2.0",
|
||||
"gtk-3",
|
||||
"gobject-2.0",
|
||||
"asound"
|
||||
"gobject-2.0",
|
||||
"asound"
|
||||
}
|
||||
|
||||
buildoptions { "`pkg-config --cflags glib-2.0 pango gdk-pixbuf-2.0 gtk-3 atk tk-3.0 glib-2.0`" }
|
||||
@@ -372,8 +345,10 @@ project "Editor"
|
||||
{
|
||||
"/usr/include/gtk-3.0/",
|
||||
"/usr/lib/glib-2.0/include",
|
||||
"/usr/include/glib-2.0",
|
||||
"/usr/include/glib-2.0",
|
||||
}
|
||||
|
||||
|
||||
|
||||
defines
|
||||
{
|
||||
@@ -409,5 +384,4 @@ project "Editor"
|
||||
-- copy a file from the objects directory to the target directory
|
||||
postbuildcommands {
|
||||
--"{COPY} "Nuake/dependencies/GLFW/lib-vc2019/glfw3.dll" " .. "./bin/" .. outputdir .. "/%{prj.name}/glfw3.dll"
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user