update entlong field

This commit is contained in:
DCFApixels 2025-04-20 19:01:55 +08:00
parent 8418c81e34
commit 173ba244b1
2 changed files with 51 additions and 1 deletions

View File

@ -1,5 +1,6 @@
#if UNITY_EDITOR
using DCFApixels.DragonECS.Unity.Internal;
using System.Reflection;
using UnityEditor;
using UnityEngine;
@ -90,6 +91,17 @@ namespace DCFApixels.DragonECS.Unity.Editors
ent = monitor.Entity;
isValide = true;
}
else
{
foreach (var beh in go.GetComponents<MonoBehaviour>())
{
if(TryFindEntlong(beh, out ent))
{
isValide = true;
break;
}
}
}
}
else
{
@ -103,10 +115,20 @@ namespace DCFApixels.DragonECS.Unity.Editors
ent = monitor.Entity;
isValide = true;
}
else
{
if (TryFindEntlong(dragged, out ent))
{
isValide = true;
}
}
}
if (isValide)
{
EditorGUI.ObjectField
long entityLong = *(long*)&ent;
fulleProperty.longValue = entityLong;
}
@ -124,6 +146,34 @@ namespace DCFApixels.DragonECS.Unity.Editors
//Event.current.Use();
}
private bool TryFindEntlong(Object uniObj, out entlong ent)
{
var fields = uniObj.GetType().GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
foreach (var field in fields)
{
if(field.FieldType == typeof(entlong))
{
ent = (entlong)field.GetValue(uniObj);
return true;
}
}
var iterator = new SerializedObject(uniObj).GetIterator();
iterator.NextVisible(true);
while (iterator.Next(true))
{
if (iterator.propertyType == SerializedPropertyType.Integer &&
iterator.propertyPath.Contains(nameof(entlong)))
{
var l = iterator.longValue;
ent = *(entlong*)&l;
return true;
}
}
ent = entlong.NULL;
return false;
}
public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
{
const float UNITY_HEIGHT_CONSTANT = 18f;

View File

@ -277,7 +277,7 @@ namespace DCFApixels.DragonECS.Unity.Editors
public static LabelWidthScope SetLabelWidth(float value) => new LabelWidthScope(value);
#endregion
private static readonly BindingFlags fieldFlags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic;
//private static readonly BindingFlags fieldFlags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic;
internal readonly static Color GrayColor = new Color32(100, 100, 100, 255);
internal readonly static Color GreenColor = new Color32(75, 255, 0, 255);