mirror of
https://github.com/vrm-c/UniVRM.git
synced 2026-03-31 14:55:07 -05:00
64 lines
1.9 KiB
C#
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;
|
|
}
|
|
}
|
|
} |