public static bool IsGoodWith(this LegalTypeFlags flag, Type[] goodTypes, SerializedProperty prop)
        {
            if (goodTypes != null)
            {
                foreach (var item in goodTypes)
                {
                    if (TheReflection.Is(CyberEdit.Current.CurrentField.FieldType, item))
                    {
                        return(true);
                    }
                }
            }

            if (flag.HasFlag(LegalTypeFlags.Array) && prop.isArray)
            {
                return(true);
            }
            if (flag.HasFlag(LegalTypeFlags.GenericNonArray) && prop.propertyType == SerializedPropertyType.Generic && prop.isArray == false)
            {
                return(true);
            }
            if (flag.HasFlag(LegalTypeFlags.NonGeneric) && prop.propertyType != SerializedPropertyType.Generic)
            {
                return(true);
            }
            if (flag.HasFlag(LegalTypeFlags.ObjectReference) && prop.propertyType == SerializedPropertyType.ObjectReference)
            {
                return(true);
            }
            if (flag.HasFlag(LegalTypeFlags.String) && prop.propertyType == SerializedPropertyType.String)
            {
                return(true);
            }
            if (flag.HasFlag(LegalTypeFlags.Vector2) && prop.propertyType == SerializedPropertyType.Vector2)
            {
                return(true);
            }
            if (flag.HasFlag(LegalTypeFlags.NumberValue) && prop.GetFieldType().IsNumber())
            {
                return(true);
            }
            if (flag.HasFlag(LegalTypeFlags.Vector2Int) && prop.propertyType == SerializedPropertyType.Vector2Int)
            {
                return(true);
            }
            if (flag.HasFlag(LegalTypeFlags.Enum) && prop.propertyType == SerializedPropertyType.Enum)
            {
                return(true);
            }
            return(false);
        }
 public CyberAttributeUsageAttribute(LegalTypeFlags legalTypeFlags, params Type[] goodTypes)
 {
     Flag = legalTypeFlags;
     AdditionalLegalType = goodTypes ?? new Type[0];
 }