using System.Collections; using System.Collections.Generic; using System.Reflection; using System; using UnityEngine; #if UNITY_EDITOR using static VInspector.Libs.VUtils; #endif namespace VInspector { public class FoldoutAttribute : Attribute { public string name; public FoldoutAttribute(string name) => this.name = name; } public class EndFoldoutAttribute : Attribute { } public class TabAttribute : Attribute { public string name; public TabAttribute(string name) => this.name = name; } public class EndTabAttribute : Attribute { } public class ButtonAttribute : Attribute { public string name = ""; public int size = 30; public int space = 0; public string color = "Grey"; public ButtonAttribute() => this.name = ""; public ButtonAttribute(string name) => this.name = name; } public class VariantsAttribute : PropertyAttribute { public object[] variants; public VariantsAttribute(params object[] variants) => this.variants = variants; } public abstract class IfAttribute : Attribute { public string variableName; public object variableValue; #if UNITY_EDITOR public bool Evaluate(object target) { if (target.GetType().GetFieldInfo(variableName) == null && target.GetType().GetPropertyInfo(variableName) == null) return false; var curValue = target.GetMemberValue(variableName); return object.Equals(curValue, variableValue); } #endif public IfAttribute(string boolName) { this.variableName = boolName; this.variableValue = true; } public IfAttribute(string variableName, object variableValue) { this.variableName = variableName; this.variableValue = variableValue; } } public class EndIfAttribute : Attribute { } public class HideIfAttribute : IfAttribute { public HideIfAttribute(string boolName) : base(boolName) { } public HideIfAttribute(string variableName, object variableValue) : base(variableName, variableValue) { } } public class ShowIfAttribute : IfAttribute { public ShowIfAttribute(string boolName) : base(boolName) { } public ShowIfAttribute(string variableName, object variableValue) : base(variableName, variableValue) { } } public class EnableIfAttribute : IfAttribute { public EnableIfAttribute(string boolName) : base(boolName) { } public EnableIfAttribute(string variableName, object variableValue) : base(variableName, variableValue) { } } public class DisableIfAttribute : IfAttribute { public DisableIfAttribute(string boolName) : base(boolName) { } public DisableIfAttribute(string variableName, object variableValue) : base(variableName, variableValue) { } } public class ReadOnlyAttribute : Attribute { } public class ShowInInspectorAttribute : Attribute { } [AttributeUsage(AttributeTargets.Method)] public class OnValueChangedAttribute : Attribute { public string[] variableNames; public OnValueChangedAttribute(string variableName) => this.variableNames = new[] { variableName }; public OnValueChangedAttribute(params string[] variableNames) => this.variableNames = variableNames; } }