From ead6ff664586f6a7aadf19cd42e4b12000968599 Mon Sep 17 00:00:00 2001 From: Antoine Pilote Date: Thu, 15 Aug 2024 19:08:50 -0400 Subject: [PATCH] Added Get/Set for entity name in .Net API --- .../src/Scripting/NetModules/SceneNetAPI.cpp | 31 +++++++++++++++ Nuake/src/Scripting/ScriptingEngineNet.cpp | 4 +- NuakeNet/src/Entity.cs | 38 ++++++++++++++++++- NuakeNet/src/Scene.cs | 10 +---- 4 files changed, 70 insertions(+), 13 deletions(-) diff --git a/Nuake/src/Scripting/NetModules/SceneNetAPI.cpp b/Nuake/src/Scripting/NetModules/SceneNetAPI.cpp index cc538e3a..dbf0f72f 100644 --- a/Nuake/src/Scripting/NetModules/SceneNetAPI.cpp +++ b/Nuake/src/Scripting/NetModules/SceneNetAPI.cpp @@ -177,6 +177,29 @@ namespace Nuake { return scene->GetRelativeEntityFromPath(entity, input).GetHandle(); } + Coral::String EntityGetName(int handle) + { + Entity entity = { (entt::entity)(handle), Engine::GetCurrentScene().get() }; + if (!entity.IsValid()) + { + return Coral::String(); + } + + return Coral::String::New(entity.GetComponent().Name); + } + + void EntitySetName(int handle, Coral::String newName) + { + Entity entity = { (entt::entity)(handle), Engine::GetCurrentScene().get() }; + if (!entity.IsValid()) + { + return; + } + + const std::string newEntityName = Engine::GetCurrentScene()->GetUniqueEntityName(newName); + entity.GetComponent().Name = newEntityName; + } + void TransformSetPosition(int entityId, float x, float y, float z) { Entity entity = { (entt::entity)(entityId), Engine::GetCurrentScene().get() }; @@ -336,25 +359,33 @@ namespace Nuake { RegisterMethod("Entity.EntityHasComponentIcall", &EntityHasComponent); RegisterMethod("Entity.EntityHasManagedInstanceIcall", &EntityHasManagedInstance); RegisterMethod("Entity.EntityGetEntityIcall", &EntityGetEntity); + RegisterMethod("Entity.EntityGetNameIcall", &EntityGetName); + RegisterMethod("Entity.EntitySetNameIcall", &EntitySetName); // Scene RegisterMethod("Scene.GetEntityIcall", &GetEntity); RegisterMethod("Scene.GetEntityScriptFromNameIcall", &GetEntityScriptFromName); RegisterMethod("Scene.GetEntityScriptFromHandleIcall", &GetEntityScriptFromHandle); RegisterMethod("Scene.InstancePrefabIcall", &InstancePrefab); + // Components + // Transform RegisterMethod("TransformComponent.SetPositionIcall", &TransformSetPosition); RegisterMethod("TransformComponent.GetPositionIcall", &TransformGetPosition); RegisterMethod("TransformComponent.GetGlobalPositionIcall", &TransformGetGlobalPosition); RegisterMethod("TransformComponent.RotateIcall", &TransformRotate); + // Camera RegisterMethod("CameraComponent.GetDirectionIcall", &CameraGetDirection); + // Character Controller RegisterMethod("CharacterControllerComponent.MoveAndSlideIcall", &MoveAndSlide); RegisterMethod("CharacterControllerComponent.IsOnGroundIcall", &IsOnGround); + // Skinned RegisterMethod("SkinnedModelComponent.PlayIcall", &Play); + // Navigation Mesh RegisterMethod("NavMeshVolumeComponent.FindPathIcall", &NavMeshComponentFindPath); } diff --git a/Nuake/src/Scripting/ScriptingEngineNet.cpp b/Nuake/src/Scripting/ScriptingEngineNet.cpp index d92c0595..08274286 100644 --- a/Nuake/src/Scripting/ScriptingEngineNet.cpp +++ b/Nuake/src/Scripting/ScriptingEngineNet.cpp @@ -367,9 +367,7 @@ namespace Nuake else { // In the case where the entity doesnt have an instance, we create one - auto newEntity = m_BaseEntityType.CreateInstance(); - newEntity.SetPropertyValue("ECSHandle", scriptEntity.GetHandle()); - newEntity.SetPropertyValue("ID", scriptEntity.GetID()); + auto newEntity = m_BaseEntityType.CreateInstance(scriptEntity.GetHandle()); classInstance.SetFieldValue(exposedVarUserValue.Name, newEntity); } } diff --git a/NuakeNet/src/Entity.cs b/NuakeNet/src/Entity.cs index 8f62ebc7..dc0708f1 100644 --- a/NuakeNet/src/Entity.cs +++ b/NuakeNet/src/Entity.cs @@ -24,6 +24,9 @@ namespace Nuake.Net internal static unsafe delegate* EntityHasComponentIcall; internal static unsafe delegate* EntityHasManagedInstanceIcall; internal static unsafe delegate* EntityGetEntityIcall; + internal static unsafe delegate* EntityGetNameIcall; + internal static unsafe delegate* EntitySetNameIcall; + public enum ComponentTypes { Unknown = -1, @@ -55,6 +58,37 @@ namespace Nuake.Net public int ID { get; set; } public int ECSHandle { get; set; } + public string Name + { + get + { + unsafe + { + NativeString name = EntityGetNameIcall(ECSHandle); + return name; + } + } + set + { + if(String.IsNullOrEmpty(value)) + { + Engine.Log("Invalid entity name: cannot be empty."); + return; + } + + unsafe + { + EntitySetNameIcall(ECSHandle, value); + } + } + } + + public Entity() { } + public Entity(int handle) + { + ECSHandle = handle; + } + public virtual void OnInit() { } public virtual void OnUpdate(float dt) { } public virtual void OnFixedUpdate(float dt) { } @@ -78,7 +112,7 @@ namespace Nuake.Net } else { - entityInstance = new Entity { ECSHandle = entity }; + entityInstance = new Entity(ECSHandle); } } @@ -144,7 +178,7 @@ namespace Nuake.Net } else { - entityInstance = new Entity { ECSHandle = entityHandle }; + entityInstance = new Entity(entityHandle); } } diff --git a/NuakeNet/src/Scene.cs b/NuakeNet/src/Scene.cs index f7f981b5..75d56cb2 100644 --- a/NuakeNet/src/Scene.cs +++ b/NuakeNet/src/Scene.cs @@ -49,10 +49,7 @@ namespace Nuake.Net throw new Exception("Entity not found"); } - Entity entity = new Entity - { - ECSHandle = handle - }; + Entity entity = new Entity(handle); return entity; } @@ -76,10 +73,7 @@ namespace Nuake.Net // return entity as T; //} - Entity entity = new Entity - { - ECSHandle = handle - }; + Entity entity = new Entity(handle); return entity; }