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); }
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); }