feat(scripting): add mesh component script wrappers
This commit is contained in:
@@ -50,13 +50,15 @@ foreach(XCENGINE_REQUIRED_PATH
|
||||
endforeach()
|
||||
|
||||
set(XCENGINE_SCRIPT_CORE_SOURCES
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Camera.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Behaviour.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Camera.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Component.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Debug.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/GameObject.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/InternalCalls.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Light.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/MeshFilter.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/MeshRenderer.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/MonoBehaviour.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Quaternion.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Space.cs
|
||||
@@ -71,6 +73,7 @@ set(XCENGINE_GAME_SCRIPT_SOURCES
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/GameScripts/BuiltinComponentProbe.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/GameScripts/HierarchyProbe.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/GameScripts/LifecycleProbe.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/GameScripts/MeshComponentProbe.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/GameScripts/TransformConversionProbe.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/GameScripts/TransformMotionProbe.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/GameScripts/TransformOrientationProbe.cs
|
||||
|
||||
60
managed/GameScripts/MeshComponentProbe.cs
Normal file
60
managed/GameScripts/MeshComponentProbe.cs
Normal file
@@ -0,0 +1,60 @@
|
||||
using XCEngine;
|
||||
|
||||
namespace Gameplay
|
||||
{
|
||||
public sealed class MeshComponentProbe : MonoBehaviour
|
||||
{
|
||||
public bool HasMeshFilter;
|
||||
public bool HasMeshRenderer;
|
||||
public bool MeshFilterLookupSucceeded;
|
||||
public bool MeshRendererLookupSucceeded;
|
||||
public string ObservedInitialMeshPath = string.Empty;
|
||||
public string ObservedUpdatedMeshPath = string.Empty;
|
||||
public int ObservedInitialMaterialCount;
|
||||
public string ObservedInitialMaterial0Path = string.Empty;
|
||||
public bool ObservedInitialCastShadows;
|
||||
public bool ObservedInitialReceiveShadows;
|
||||
public int ObservedInitialRenderLayer;
|
||||
public int ObservedUpdatedMaterialCount;
|
||||
public string ObservedUpdatedMaterial1Path = string.Empty;
|
||||
public bool ObservedUpdatedCastShadows;
|
||||
public bool ObservedUpdatedReceiveShadows;
|
||||
public int ObservedUpdatedRenderLayer;
|
||||
|
||||
public void Start()
|
||||
{
|
||||
HasMeshFilter = HasComponent<MeshFilter>();
|
||||
HasMeshRenderer = HasComponent<MeshRenderer>();
|
||||
|
||||
MeshFilterLookupSucceeded = TryGetComponent(out MeshFilter meshFilter);
|
||||
MeshRendererLookupSucceeded = TryGetComponent(out MeshRenderer meshRenderer);
|
||||
|
||||
if (meshFilter != null)
|
||||
{
|
||||
ObservedInitialMeshPath = meshFilter.meshPath;
|
||||
meshFilter.meshPath = "Meshes/runtime_override.mesh";
|
||||
ObservedUpdatedMeshPath = meshFilter.meshPath;
|
||||
}
|
||||
|
||||
if (meshRenderer != null)
|
||||
{
|
||||
ObservedInitialMaterialCount = meshRenderer.materialCount;
|
||||
ObservedInitialMaterial0Path = meshRenderer.GetMaterialPath(0);
|
||||
ObservedInitialCastShadows = meshRenderer.castShadows;
|
||||
ObservedInitialReceiveShadows = meshRenderer.receiveShadows;
|
||||
ObservedInitialRenderLayer = meshRenderer.renderLayer;
|
||||
|
||||
meshRenderer.SetMaterialPath(1, "Materials/runtime_override.mat");
|
||||
meshRenderer.castShadows = false;
|
||||
meshRenderer.receiveShadows = true;
|
||||
meshRenderer.renderLayer = 11;
|
||||
|
||||
ObservedUpdatedMaterialCount = meshRenderer.materialCount;
|
||||
ObservedUpdatedMaterial1Path = meshRenderer.GetMaterialPath(1);
|
||||
ObservedUpdatedCastShadows = meshRenderer.castShadows;
|
||||
ObservedUpdatedReceiveShadows = meshRenderer.receiveShadows;
|
||||
ObservedUpdatedRenderLayer = meshRenderer.renderLayer;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -187,5 +187,41 @@ namespace XCEngine
|
||||
|
||||
[MethodImpl(MethodImplOptions.InternalCall)]
|
||||
internal static extern void Light_SetCastsShadows(ulong gameObjectUUID, bool value);
|
||||
|
||||
[MethodImpl(MethodImplOptions.InternalCall)]
|
||||
internal static extern string MeshFilter_GetMeshPath(ulong gameObjectUUID);
|
||||
|
||||
[MethodImpl(MethodImplOptions.InternalCall)]
|
||||
internal static extern void MeshFilter_SetMeshPath(ulong gameObjectUUID, string path);
|
||||
|
||||
[MethodImpl(MethodImplOptions.InternalCall)]
|
||||
internal static extern int MeshRenderer_GetMaterialCount(ulong gameObjectUUID);
|
||||
|
||||
[MethodImpl(MethodImplOptions.InternalCall)]
|
||||
internal static extern string MeshRenderer_GetMaterialPath(ulong gameObjectUUID, int index);
|
||||
|
||||
[MethodImpl(MethodImplOptions.InternalCall)]
|
||||
internal static extern void MeshRenderer_SetMaterialPath(ulong gameObjectUUID, int index, string path);
|
||||
|
||||
[MethodImpl(MethodImplOptions.InternalCall)]
|
||||
internal static extern void MeshRenderer_ClearMaterials(ulong gameObjectUUID);
|
||||
|
||||
[MethodImpl(MethodImplOptions.InternalCall)]
|
||||
internal static extern bool MeshRenderer_GetCastShadows(ulong gameObjectUUID);
|
||||
|
||||
[MethodImpl(MethodImplOptions.InternalCall)]
|
||||
internal static extern void MeshRenderer_SetCastShadows(ulong gameObjectUUID, bool value);
|
||||
|
||||
[MethodImpl(MethodImplOptions.InternalCall)]
|
||||
internal static extern bool MeshRenderer_GetReceiveShadows(ulong gameObjectUUID);
|
||||
|
||||
[MethodImpl(MethodImplOptions.InternalCall)]
|
||||
internal static extern void MeshRenderer_SetReceiveShadows(ulong gameObjectUUID, bool value);
|
||||
|
||||
[MethodImpl(MethodImplOptions.InternalCall)]
|
||||
internal static extern int MeshRenderer_GetRenderLayer(ulong gameObjectUUID);
|
||||
|
||||
[MethodImpl(MethodImplOptions.InternalCall)]
|
||||
internal static extern void MeshRenderer_SetRenderLayer(ulong gameObjectUUID, int value);
|
||||
}
|
||||
}
|
||||
|
||||
22
managed/XCEngine.ScriptCore/MeshFilter.cs
Normal file
22
managed/XCEngine.ScriptCore/MeshFilter.cs
Normal file
@@ -0,0 +1,22 @@
|
||||
namespace XCEngine
|
||||
{
|
||||
public sealed class MeshFilter : Component
|
||||
{
|
||||
internal MeshFilter(ulong gameObjectUUID)
|
||||
: base(gameObjectUUID)
|
||||
{
|
||||
}
|
||||
|
||||
public string MeshPath
|
||||
{
|
||||
get => InternalCalls.MeshFilter_GetMeshPath(GameObjectUUID) ?? string.Empty;
|
||||
set => InternalCalls.MeshFilter_SetMeshPath(GameObjectUUID, value ?? string.Empty);
|
||||
}
|
||||
|
||||
public string meshPath
|
||||
{
|
||||
get => MeshPath;
|
||||
set => MeshPath = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
64
managed/XCEngine.ScriptCore/MeshRenderer.cs
Normal file
64
managed/XCEngine.ScriptCore/MeshRenderer.cs
Normal file
@@ -0,0 +1,64 @@
|
||||
namespace XCEngine
|
||||
{
|
||||
public sealed class MeshRenderer : Component
|
||||
{
|
||||
internal MeshRenderer(ulong gameObjectUUID)
|
||||
: base(gameObjectUUID)
|
||||
{
|
||||
}
|
||||
|
||||
public int MaterialCount => InternalCalls.MeshRenderer_GetMaterialCount(GameObjectUUID);
|
||||
public int materialCount => MaterialCount;
|
||||
|
||||
public bool CastShadows
|
||||
{
|
||||
get => InternalCalls.MeshRenderer_GetCastShadows(GameObjectUUID);
|
||||
set => InternalCalls.MeshRenderer_SetCastShadows(GameObjectUUID, value);
|
||||
}
|
||||
|
||||
public bool castShadows
|
||||
{
|
||||
get => CastShadows;
|
||||
set => CastShadows = value;
|
||||
}
|
||||
|
||||
public bool ReceiveShadows
|
||||
{
|
||||
get => InternalCalls.MeshRenderer_GetReceiveShadows(GameObjectUUID);
|
||||
set => InternalCalls.MeshRenderer_SetReceiveShadows(GameObjectUUID, value);
|
||||
}
|
||||
|
||||
public bool receiveShadows
|
||||
{
|
||||
get => ReceiveShadows;
|
||||
set => ReceiveShadows = value;
|
||||
}
|
||||
|
||||
public int RenderLayer
|
||||
{
|
||||
get => InternalCalls.MeshRenderer_GetRenderLayer(GameObjectUUID);
|
||||
set => InternalCalls.MeshRenderer_SetRenderLayer(GameObjectUUID, value);
|
||||
}
|
||||
|
||||
public int renderLayer
|
||||
{
|
||||
get => RenderLayer;
|
||||
set => RenderLayer = value;
|
||||
}
|
||||
|
||||
public string GetMaterialPath(int index)
|
||||
{
|
||||
return InternalCalls.MeshRenderer_GetMaterialPath(GameObjectUUID, index) ?? string.Empty;
|
||||
}
|
||||
|
||||
public void SetMaterialPath(int index, string path)
|
||||
{
|
||||
InternalCalls.MeshRenderer_SetMaterialPath(GameObjectUUID, index, path ?? string.Empty);
|
||||
}
|
||||
|
||||
public void ClearMaterials()
|
||||
{
|
||||
InternalCalls.MeshRenderer_ClearMaterials(GameObjectUUID);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user