Пример #1
0
    public override double Draw(IMemberInspectionInfo attr, double value)
    {
        if (attr.InspectAttribute is InspectAsFloatSliderAttribute attr_)
        {
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.PrefixLabel(attr.Info.Name);

            float narrowedDouble = Convert.ToSingle(value);
            float newValue       = EditorGUILayout.Slider(narrowedDouble, attr_.SliderMin, attr_.SliderMax);

            EditorGUILayout.EndHorizontal();
            return(newValue);
        }
        else
        {
            switch (attr.InspectAttribute.InspectionKind)
            {
            case InspectionKind.Delayed:
                return(EditorGUILayout.DelayedDoubleField(attr.Info.Name, value));

            default:
                return(EditorGUILayout.DoubleField(attr.Info.Name, value));
            }
        }
    }
    public override byte Draw(IMemberInspectionInfo attr, byte value)
    {
        int newValue;

        if (attr.InspectAttribute is InspectAsByteSliderAttribute attr_)
        {
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.PrefixLabel(attr.Info.Name);
            newValue = EditorGUILayout.IntSlider(value, attr_.SliderMin, attr_.SliderMax);
            EditorGUILayout.EndHorizontal();
        }
        else
        {
            newValue = EditorGUILayout.IntField(attr.Info.Name, value);
        }

        if (newValue < byte.MinValue)
        {
            return(byte.MinValue);
        }

        if (newValue > byte.MaxValue)
        {
            return(byte.MaxValue);
        }

        return((byte)newValue);
    }
    public override ushort Draw(IMemberInspectionInfo attr, ushort value)
    {
        int newValue;

        if (attr.InspectAttribute is InspectAsUnsignedShortSliderAttribute attr_)
        {
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.PrefixLabel(attr.Info.Name);
            newValue = EditorGUILayout.IntSlider(value, attr_.SliderMin, attr_.SliderMax);
            EditorGUILayout.EndHorizontal();
        }
        else
        {
            newValue = EditorGUILayout.IntField(attr.Info.Name, value);
        }

        if (newValue < ushort.MinValue)
        {
            return(ushort.MinValue);
        }

        if (newValue > ushort.MaxValue)
        {
            return(ushort.MaxValue);
        }

        return((ushort)newValue);
    }
    public object Draw(IMemberInspectionInfo attr, object value)
    {
        if (value is Enum enum_)
        {
            var flagAttrs = attr.RealType.GetCustomAttributes(typeof(FlagsAttribute), false);

            if (flagAttrs == null || flagAttrs.Length == 0)
            {
                return(EditorGUILayout.EnumPopup(attr.Info.Name, enum_));
            }
            else if (flagAttrs.Length == 1)
            {
                return(EditorGUILayout.EnumFlagsField(attr.Info.Name, enum_));
            }
            else
            {
                Debug.LogWarning($"Multiple attributes of type {typeof(FlagsAttribute).FullName} found for enum of type {attr.RealType.FullName}.");
                return(value);
            }
        }
        else
        {
            throw new ArgumentException("Must be an enum.", nameof(value));
        }
    }
Пример #5
0
        private object DrawMutableReference(IMemberInspectionInfo fieldOrPropertyInfo, object reference, Dictionary <string, bool> foldoutData, Stack <string> pathStack)
        {
            var inspectionType = fieldOrPropertyInfo.InspectAttribute.InspectionKind;

            if (reference is UnityEngine.Object obj && inspectionType == InspectionKind.DropableObject)
            {
                return(new DropableObjectDrawer().Draw(fieldOrPropertyInfo, obj, false));
            }
    public Object Draw(IMemberInspectionInfo attr, Object value, bool allowSceneObjects)
    {
        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.PrefixLabel(attr.Info.Name);
        var result = EditorGUILayout.ObjectField(value, attr.RealType, allowSceneObjects);

        EditorGUILayout.EndHorizontal();
        return(result);
    }
    public override LayerMask Draw(IMemberInspectionInfo attr, LayerMask value)
    {
        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.PrefixLabel(attr.Info.Name);
        int newValue = EditorGUILayout.LayerField(value);

        EditorGUILayout.EndHorizontal();
        return(newValue);
    }
Пример #8
0
    public override char Draw(IMemberInspectionInfo attr, char value)
    {
        string newValue = EditorGUILayout.TextField(attr.Info.Name, value.ToString());

        if (newValue == null || newValue == string.Empty)
        {
            return(value);
        }

        return(newValue[0]);
    }
Пример #9
0
 private void DrawImmutable(object target, IMemberInspectionInfo memberToInspect, Dictionary <string, bool> folderPathToIsExpanded, Stack <string> pathStack)
 {
     if (ShouldDrawTypeAsList(memberToInspect.RealType))
     {
         // Lists are only readonly on their surface.
         DrawIEnumerable(target, memberToInspect, true, folderPathToIsExpanded, pathStack);
     }
     else
     {
         // Create a readonly field.
         string text = memberToInspect.GetValue(target).ToString();
         EditorGUILayout.LabelField(memberToInspect.Info.Name, text);
     }
 }
Пример #10
0
    public override ulong Draw(IMemberInspectionInfo attr, ulong value)
    {
        string newValue = EditorGUILayout.TextField(attr.Info.Name, value.ToString());

        if (newValue == null || newValue == string.Empty)
        {
            return(value);
        }

        if (ulong.TryParse(newValue, out var result))
        {
            return(result);
        }

        return(value);
    }
    public override uint Draw(IMemberInspectionInfo attr, uint value)
    {
        long newValue = EditorGUILayout.LongField(attr.Info.Name, value);

        if (newValue < uint.MinValue)
        {
            return(uint.MinValue);
        }

        if (newValue > uint.MaxValue)
        {
            return(uint.MaxValue);
        }

        return((uint)newValue);
    }
Пример #12
0
 private void DrawImmutableSelectable(object target, IMemberInspectionInfo memberToInspect, Dictionary <string, bool> folderPathToIsExpanded, Stack <string> pathStack)
 {
     if (ShouldDrawTypeAsList(memberToInspect.RealType))
     {
         Warn($"It doesn't make sense to draw an instance of {memberToInspect.Info.ReflectedType.Name} as {InspectionKind.ImmutableSelectable}. It will be drawn as {InspectionKind.Immutable} instead.");
         DrawIEnumerable(target, memberToInspect, true, folderPathToIsExpanded, pathStack);
     }
     else
     {
         // TODO Really draw references as selectable?
         EditorGUILayout.BeginHorizontal();
         EditorGUILayout.PrefixLabel(memberToInspect.Info.Name);
         string text = memberToInspect.GetValue(target).ToString();
         EditorGUILayout.SelectableLabel(text);
         EditorGUILayout.EndHorizontal();
     }
 }
Пример #13
0
        private void DrawMutable(object target, IMemberInspectionInfo memberToInspect, Dictionary <string, bool> folderPathToIsExpanded, Stack <string> pathStack)
        {
            var    obj = memberToInspect.GetValue(target);
            object newObj;

            if (memberToInspect.RealType.IsEnum)
            {
                newObj = new EnumDrawer().Draw(memberToInspect, obj);
            }
            else
            {
                if (_drawers.TryGetValue(memberToInspect.RealType, out var drawer))
                {
                    //TODO better null checking (string)
                    if (obj != null /*|| memberToInspect.RealType == typeof(string)*/)
                    {
                        newObj = drawer.Draw(memberToInspect, obj);
                    }
                    else
                    {
                        DrawNone(memberToInspect.Info.Name);
                        newObj = null;
                    }
                }
                else
                {
                    if (obj != null && memberToInspect.RealType.IsValueType)
                    {
                        Warn($"The following value-type has no registered drawer: {memberToInspect.RealType}");
                        newObj = obj;
                    }
                    else
                    {
                        newObj = DrawMutableReference(memberToInspect, obj, folderPathToIsExpanded, pathStack);
                    }
                }
            }

            if (obj != newObj)
            {
                memberToInspect.SetValue(target, newObj);
            }
        }
Пример #14
0
    public override string Draw(IMemberInspectionInfo attr, string value)
    {
        switch (attr.InspectAttribute.InspectionKind)
        {
        case InspectionKind.Delayed:
            return(EditorGUILayout.DelayedTextField(attr.Info.Name, value));

        case InspectionKind.Tag:
            return(EditorGUILayout.TagField(attr.Info.Name, value));

        case InspectionKind.TextArea:
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.PrefixLabel(attr.Info.Name);
            var result = EditorGUILayout.TextArea(value);
            EditorGUILayout.EndHorizontal();
            return(result);

        default:
            return(EditorGUILayout.TextField(attr.Info.Name, value));
        }
    }
    public override int Draw(IMemberInspectionInfo attr, int value)
    {
        if (attr.InspectAttribute is InspectAsIntegerSliderAttribute attr_)
        {
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.PrefixLabel(attr.Info.Name);
            var newVal = EditorGUILayout.IntSlider(value, attr_.SliderMin, attr_.SliderMax);
            EditorGUILayout.EndHorizontal();
            return(newVal);
        }
        else
        {
            switch (attr.InspectAttribute.InspectionKind)
            {
            case InspectionKind.Delayed:
                return(EditorGUILayout.DelayedIntField(attr.Info.Name, value));

            default:
                return(EditorGUILayout.IntField(attr.Info.Name, value));
            }
        }
    }
Пример #16
0
 public override AnimationCurve Draw(IMemberInspectionInfo attr, AnimationCurve value)
 {
     return(EditorGUILayout.CurveField(attr.Info.Name, value));
 }
 public override bool Draw(IMemberInspectionInfo attr, bool value)
 {
     return(EditorGUILayout.Toggle(attr.Info.Name, value));
 }
 public override long Draw(IMemberInspectionInfo attr, long value)
 {
     return(EditorGUILayout.LongField(attr.Info.Name, value));
 }
 public override Bounds Draw(IMemberInspectionInfo attr, Bounds value)
 {
     return(EditorGUILayout.BoundsField(attr.Info.Name, value));
 }
Пример #20
0
 public override Vector4 Draw(IMemberInspectionInfo attr, Vector4 value)
 {
     return(EditorGUILayout.Vector4Field(attr.Info.Name, value));
 }
Пример #21
0
 public override Rect Draw(IMemberInspectionInfo attr, Rect value)
 {
     return(EditorGUILayout.RectField(attr.Info.Name, value));
 }
 public override Color Draw(IMemberInspectionInfo attr, Color value)
 {
     return(EditorGUILayout.ColorField(attr.Info.Name, value));
 }