Add concrete component script field support

This commit is contained in:
2026-04-03 16:51:42 +08:00
parent 73415915e6
commit e0e5c1fcaa
11 changed files with 507 additions and 4 deletions

View File

@@ -125,6 +125,7 @@ set(XCENGINE_SCRIPT_CORE_SOURCES
set(XCENGINE_GAME_SCRIPT_SOURCES
${CMAKE_CURRENT_SOURCE_DIR}/GameScripts/BuiltinComponentProbe.cs
${CMAKE_CURRENT_SOURCE_DIR}/GameScripts/AddComponentProbe.cs
${CMAKE_CURRENT_SOURCE_DIR}/GameScripts/ComponentReferenceProbe.cs
${CMAKE_CURRENT_SOURCE_DIR}/GameScripts/EnumFieldProbe.cs
${CMAKE_CURRENT_SOURCE_DIR}/GameScripts/FieldMetadataProbe.cs
${CMAKE_CURRENT_SOURCE_DIR}/GameScripts/GetComponentsProbe.cs

View File

@@ -0,0 +1,70 @@
using XCEngine;
namespace Gameplay
{
public sealed class ComponentFieldMetadataProbe : MonoBehaviour
{
public Transform Pivot;
public Camera SceneCamera;
public ScriptComponentTargetProbe ScriptTarget;
public Component UnsupportedComponent;
public Behaviour UnsupportedBehaviour;
public MonoBehaviour UnsupportedMonoBehaviour;
}
public sealed class ComponentFieldProbe : MonoBehaviour
{
public Transform Pivot;
public Camera SceneCamera;
public ScriptComponentTargetProbe ScriptTarget;
public bool ObservedStoredPivotApplied;
public bool ObservedStoredCameraApplied;
public bool ObservedStoredScriptApplied;
public string ObservedPivotName = string.Empty;
public string ObservedCameraName = string.Empty;
public string ObservedScriptName = string.Empty;
public int ObservedScriptAwakeCount = -1;
public int ObservedScriptHostCallCount = -1;
public bool ObservedUpdatedPivotAssigned;
public bool ObservedUpdatedCameraAssigned;
public bool ObservedUpdatedScriptAssigned;
public string ObservedUpdatedPivotName = string.Empty;
public string ObservedUpdatedCameraName = string.Empty;
public string ObservedUpdatedScriptName = string.Empty;
public void Start()
{
ObservedStoredPivotApplied = Pivot != null;
ObservedStoredCameraApplied = SceneCamera != null;
ObservedStoredScriptApplied = ScriptTarget != null;
ObservedPivotName = Pivot != null ? Pivot.gameObject.name : string.Empty;
ObservedCameraName = SceneCamera != null ? SceneCamera.gameObject.name : string.Empty;
ObservedScriptName = ScriptTarget != null ? ScriptTarget.gameObject.name : string.Empty;
if (ScriptTarget != null)
{
ObservedScriptAwakeCount = ScriptTarget.AwakeCount;
ScriptTarget.IncrementFromHost();
ObservedScriptHostCallCount = ScriptTarget.HostCallCount;
}
Pivot = transform;
SceneCamera = GetComponent<Camera>();
ScriptTarget = GetComponent<ScriptComponentTargetProbe>();
if (ScriptTarget == null)
{
ScriptTarget = AddComponent<ScriptComponentTargetProbe>();
}
ObservedUpdatedPivotAssigned = Pivot != null;
ObservedUpdatedCameraAssigned = SceneCamera != null;
ObservedUpdatedScriptAssigned = ScriptTarget != null;
ObservedUpdatedPivotName = Pivot != null ? Pivot.gameObject.name : string.Empty;
ObservedUpdatedCameraName = SceneCamera != null ? SceneCamera.gameObject.name : string.Empty;
ObservedUpdatedScriptName = ScriptTarget != null ? ScriptTarget.gameObject.name : string.Empty;
}
}
}