Esempio n. 1
0
        public static List <NodeFieldDesc> GetNodeFieldDesc(Type type, Type fieldAttributeType)
        {
            List <NodeFieldDesc> list = new List <NodeFieldDesc>();
            BindingFlags         flag = BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public;

            FieldInfo[] fields = type.GetFields(flag);
            foreach (FieldInfo field in fields)
            {
                object[] field_attrs = field.GetCustomAttributes(fieldAttributeType, false);
                if (field_attrs.Length > 0)
                {
                    NodeFieldBaseAttribute attri = field_attrs[0] as NodeFieldBaseAttribute;
                    NodeFieldDesc          desc  = new NodeFieldDesc();
                    desc.name          = field.Name;
                    desc.desc          = attri.Desc;
                    desc.type          = field.FieldType;
                    desc.value         = GetDefaultValue(field.FieldType, attri);
                    desc.attributeType = fieldAttributeType;
                    desc.envKeyType    = attri.envKeyType;
                    if ((typeof(NodeInputAttribute) == fieldAttributeType || typeof(NodeInputAttribute) == fieldAttributeType) && desc.envKeyType == null)
                    {
                        Log.Error($"Node:{type.Name} Field:{desc.name}  _envKeyType can not be null");
                        return(null);
                    }
                    object[] constraints = field.GetCustomAttributes(typeof(NodeFieldConstraintAttribute), false);
                    if (constraints.Length > 0)
                    {
                        NodeFieldConstraintAttribute constraint = constraints[0] as NodeFieldConstraintAttribute;
                        desc.constraintTypes = constraint.Types;
                    }

                    list.Add(desc);
                }
            }
            return(list);
        }
Esempio n. 2
0
        public static object GetDefaultValue(Type type, NodeFieldBaseAttribute att)
        {
            if (att.DefaultValue != null)
            {
                if ((TypeHelper.IsEnumType(type) && BTEnvKey.None != att.DefaultValue.ToString()) || !TypeHelper.IsEnumType(type))
                {
                    return(att.DefaultValue);
                }
            }
            object value = null;

            if (TypeHelper.IsDoubleType(type))
            {
                value = default(double);
            }
            else if (TypeHelper.IsStringType(type))
            {
                value = default(string);
            }
            else if (TypeHelper.IsFloatType(type))
            {
                value = default(float);
            }
            else if (TypeHelper.IsBoolType(type))
            {
                value = default(bool);
            }
            else if (TypeHelper.IsIntType(type))
            {
                value = default(int);
            }
            else if (TypeHelper.IsLongType(type))
            {
                value = default(long);
            }
            else if (TypeHelper.IsIntArrType(type))
            {
                value = default(int[]);
            }
            else if (TypeHelper.IsLongArrType(type))
            {
                value = default(long[]);
            }
            else if (TypeHelper.IsDoubleArrType(type))
            {
                value = default(double[]);
            }
            else if (TypeHelper.IsFloatArrType(type))
            {
                value = default(float[]);
            }
            else if (TypeHelper.IsStringArrType(type))
            {
                value = default(string[]);
            }
            else if (TypeHelper.IsObjectType(type))
            {
                value = default(Object);
            }
            else if (TypeHelper.IsEnumType(type))
            {
                Array array = Enum.GetValues(type);
                value = array.GetValue(0).ToString();
            }
            else if (TypeHelper.IsUnitConfigArrayType(type))
            {
            }
            else if (TypeHelper.IsSpriteArrayType(type))
            {
                value = default(Sprite[]);
            }
            else if (TypeHelper.IsObjectArrayType(type))
            {
                value = default(Object[]);
            }
            else if (TypeHelper.IsConvertble(type))
            {
                value = 1f;
            }
            else
            {
                Log.Error($"行为树节点暂时未支持此类型:{type}!");
                return(null);
            }
            return(value);
        }