56 lines
2.1 KiB
C#
56 lines
2.1 KiB
C#
using System;
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
using Object = UnityEngine.Object;
|
|
|
|
namespace Module.Inspector.Editor.Utilities
|
|
{
|
|
internal static class EditorSerializedPropertyUtility
|
|
{
|
|
public static bool IsValue(Object obj, string fieldName, object value, bool useFieldValue)
|
|
{
|
|
if (obj == null || string.IsNullOrEmpty(fieldName))
|
|
return false;
|
|
|
|
var so = new SerializedObject(obj);
|
|
SerializedProperty sp = so.FindProperty(fieldName);
|
|
return IsValue(sp, value, useFieldValue);
|
|
}
|
|
|
|
public static bool IsValue(SerializedProperty sp, object value, bool useFieldValue)
|
|
{
|
|
if (sp == null)
|
|
return false;
|
|
|
|
if (useFieldValue)
|
|
{
|
|
switch (sp.propertyType)
|
|
{
|
|
case SerializedPropertyType.Generic:
|
|
return value == (object)sp.objectReferenceValue;
|
|
case SerializedPropertyType.Integer:
|
|
return value is int i && sp.intValue == i;
|
|
case SerializedPropertyType.Boolean:
|
|
return value is bool b && sp.boolValue == b;
|
|
case SerializedPropertyType.Float:
|
|
return value is float f && Mathf.Approximately(sp.floatValue, f);
|
|
case SerializedPropertyType.String:
|
|
return value is string s && sp.stringValue == s;
|
|
case SerializedPropertyType.LayerMask:
|
|
return value is LayerMask l && sp.intValue == l;
|
|
case SerializedPropertyType.Enum:
|
|
return value is Enum && sp.intValue == Convert.ToInt32(value);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (sp.propertyType == SerializedPropertyType.Boolean)
|
|
return sp.boolValue;
|
|
if (sp.propertyType == SerializedPropertyType.ObjectReference)
|
|
return sp.objectReferenceValue != null;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
}
|
|
} |