Files
trail-into-darkness/Packages/com.jovian.inspector/Editor/Attributes/ReadOnlyAttribute.cs
2026-03-29 19:16:39 +02:00

49 lines
1.7 KiB
C#

using UnityEngine;
namespace Jovian.InspectorTools
{
public class ReadOnlyAttribute : ConditionalFieldAttribute
{
public ReadOnlyAttribute() : base("") { }
/// <param name="fieldToCheck">String name of field to check value</param>
/// <param name="inverse">Inverse check result</param>
/// <param name="compareValues">On which values field will be shown in inspector</param>
public ReadOnlyAttribute(string fieldToCheck, bool inverse = false, params object[] compareValues)
: base(fieldToCheck, inverse, compareValues) { }
}
}
#if UNITY_EDITOR
namespace Jovian.InspectorTools.Internal
{
using UnityEditor;
[CustomPropertyDrawer(typeof(ReadOnlyAttribute))]
public class ReadOnlyAttributeDrawer : PropertyDrawer
{
public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
{
return EditorGUI.GetPropertyHeight(property, label, true);
}
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
{
if (!(attribute is ReadOnlyAttribute conditional)) return;
bool enabled = false;
if (!string.IsNullOrEmpty(conditional.FieldToCheck))
{
var propertyToCheck = ConditionalFieldUtility.FindRelativeProperty(property, conditional.FieldToCheck);
enabled = !ConditionalFieldUtility.PropertyIsVisible(propertyToCheck, conditional.Inverse, conditional.CompareValues);
}
GUI.enabled = enabled;
EditorGUI.PropertyField(position, property, label, true);
GUI.enabled = true;
}
}
}
#endif