コード例 #1
0
 void DrawDefault(IInternalMemberInfo memberInfo, object memberValue, string label)
 {
     if (memberInfo.TargetType.IsValueType)
     {
         EditorGUILayout.LabelField(label, memberValue.ToString());
     }
     else
     {
         EditorGUILayout.LabelField(label, memberValue == null ? "null (" + memberInfo.TargetType.Name + ")" : memberInfo.TargetType.Name);
     }
 }
コード例 #2
0
 void DrawMember(IInternalMemberInfo memberInfo, object owner, int memberId, IDictionary <int, bool> componentToggle)
 {
     if (memberInfo.TargetType.IsArray)
     {
         DrawArray(memberInfo, owner, memberId, componentToggle);
     }
     else if (memberInfo.TargetType.IsEnum)
     {
         DrawEnum(memberInfo, owner);
     }
     else
     {
         DrawType(memberInfo, owner, memberInfo.Name);
     }
 }
コード例 #3
0
        void DrawEnum(IInternalMemberInfo memberInfo, object owner)
        {
            var value = (Enum)memberInfo.GetValue(owner);

            if (memberInfo.IsReadOnly)
            {
                EditorGUILayout.LabelField(memberInfo.Name, value.ToString());
            }
            else
            {
                var newValue = EditorGUILayout.EnumPopup(memberInfo.Name, value);

                if (value != newValue)
                {
                    memberInfo.SetValue(owner, newValue);
                }
            }
        }
コード例 #4
0
        void DrawType(IInternalMemberInfo memberInfo, object owner, string label)
        {
            var value = memberInfo.GetValue(owner);

            ITypeDrawer typeDrawer;

            if (m_TypeDrawers.TryGetValue(memberInfo.TargetType, out typeDrawer))
            {
                var newValue = typeDrawer.Draw(memberInfo, value, label);

                if (newValue != value)
                {
                    memberInfo.SetValue(owner, newValue);
                }
            }
            else
            {
                DrawDefault(memberInfo, value, label);
            }
        }
コード例 #5
0
        void DrawArray(IInternalMemberInfo memberInfo, object owner, int memberId, IDictionary <int, bool> componentToggle)
        {
            componentToggle[memberId] = EditorGUILayout.Foldout(componentToggle[memberId], memberInfo.Name);

            var value = (Array)memberInfo.GetValue(owner);

            if (value != null && componentToggle[memberId])
            {
                ITypeDrawer typeDrawer;

                EditorGUI.indentLevel++;

                if (m_TypeDrawers.TryGetValue(memberInfo.TargetType.GetElementType(), out typeDrawer))
                {
                    for (int i = 0; i < value.Length; i++)
                    {
                        var itemValue    = value.GetValue(i);
                        var newItemValue = typeDrawer.Draw(memberInfo, itemValue, "[" + i.ToString() + "]");

                        if (newItemValue != value)
                        {
                            value.SetValue(newItemValue, i);
                        }
                    }
                }
                else
                {
                    var array = (Array)memberInfo.GetValue(owner);
                    for (int i = 0; i < array.Length; i++)
                    {
                        DrawDefault(memberInfo, array.GetValue(i), "[" + i.ToString() + "]");
                    }
                }

                EditorGUI.indentLevel--;
            }
        }