dbrizov / NaughtyAttributes

Attribute Extensions for Unity

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Show if not working

fawad0dev opened this issue · comments

public enum RCType
    {
        Int,
        Float,
        Bool,
        String,
        Long,
        Json
    }
    [Serializable]
    class ValueDetail<T>
    {
        public T Value;
        public T defaultValue;
    }
    [SerializeField] RCValue[] rCValues;
    [Serializable]
    class RCValue
    {
        public string key;
        public RCType valueType;
        [ShowIf(nameof(IsInt))] public ValueDetail<int> intValue;
        [ShowIf(nameof(IsInt))] public UnityEvent<int> onIntValueFetched;
        [ShowIf(nameof(IsFloat))] public ValueDetail<float> floatValue;
        [ShowIf(nameof(IsFloat))] public UnityEvent<float> onFloatValueFetched;
        [ShowIf(nameof(IsBool))] public ValueDetail<bool> boolValue;
        [ShowIf(nameof(IsBool))] public UnityEvent<bool> onBoolValueFetched;
        [ShowIf(nameof(valueType), RCType.String)] public ValueDetail<string> stringValue;
        [ShowIf(nameof(valueType), RCType.String)] public UnityEvent<string> onStringValueFetched;
        [ShowIf(nameof(valueType), RCType.Long)] public ValueDetail<long> longValue;
        [ShowIf(nameof(valueType), RCType.Long)] public UnityEvent<long> onLongValueFetched;
        [ShowIf(nameof(valueType), RCType.Json)] public ValueDetail<string> jsonValue;
        [ShowIf(nameof(valueType), RCType.Json)] public UnityEvent<string> onJsonValueFetched;
        bool IsInt() => valueType == RCType.Int;
        bool IsFloat() => valueType == RCType.Float;
        bool IsBool() => valueType == RCType.Bool;
        bool IsString() => valueType == RCType.String;
        bool IsLong() => valueType == RCType.Long;
        bool IsJson() => valueType == RCType.Json;
    }

it is still showing all fields
image

ShowIf is a meta-attribute, which only works under NaughtyInspector. And NaughtyInspector, only works for UnityEngine.Object

[Serializable]
class RCValue {}

unfortunately, RCValue (even with Serializable) is not a UnityEngine.Object, so in NaughtyAttributes, it won't work.

Related to #107