UniVRM/Assets/VRM10/Editor/Components/VRM10MetaPropertyValidator.cs
2021-11-08 19:29:45 +09:00

64 lines
1.9 KiB
C#

using UnityEditor;
namespace UniVRM10
{
delegate (string, MessageType) VRM10MetaPropertyValidator(SerializedProperty prop);
class VRM10MetaProperty
{
public SerializedProperty m_prop;
VRM10MetaPropertyValidator m_validator;
public VRM10MetaProperty(SerializedProperty prop,
VRM10MetaPropertyValidator validator = null)
{
m_prop = prop;
if (validator == null)
{
// no validation
validator = _ => ("", MessageType.None);
}
m_validator = validator;
}
public void OnGUI()
{
// var old = m_prop.stringValue;
if (m_prop.propertyType == SerializedPropertyType.Generic)
{
if (m_prop.arrayElementType != null)
{
EditorGUILayout.LabelField(m_prop.name);
var depth = m_prop.depth;
var iterator = m_prop.Copy();
for (var enterChildren = true; iterator.NextVisible(enterChildren); enterChildren = false)
{
if (iterator.depth < depth)
break;
depth = iterator.depth;
// using (new EditorGUI.DisabledScope("m_Script" == iterator.propertyPath))
EditorGUILayout.PropertyField(iterator, true);
}
}
else
{
throw new System.NotImplementedException();
}
}
else
{
EditorGUILayout.PropertyField(m_prop);
}
var (msg, msgType) = m_validator(m_prop);
if (!string.IsNullOrEmpty(msg))
{
EditorGUILayout.HelpBox(msg, msgType);
}
// return old != m_prop.stringValue;
}
}
}