static void CachePorts(Type _nodeType)
        {
            List <FieldInfo> fieldInfos = Utility_Reflection.GetFieldInfos(_nodeType);

            foreach (var fieldInfo in fieldInfos)
            {
                // 获取接口特性
                if (!Utility_Attribute.TryGetFieldAttribute(_nodeType, fieldInfo.Name, out PortAttribute portAttribute))
                {
                    continue;
                }

                if (!portCache.ContainsKey(_nodeType))
                {
                    portCache.Add(_nodeType, new List <NodePort>());
                }

                portCache[_nodeType].Add(new NodePort(fieldInfo, portAttribute));
            }
        }
Example #2
0
        public static IEnumerable <SharedVariable> CollectionObjectSharedVariables(object _object)
        {
            List <FieldInfo> fieldInfos = Utility_Reflection.GetFieldInfos(_object.GetType());
            Type             sharedType = typeof(SharedVariable);

            foreach (var fieldInfo in fieldInfos)
            {
                if (sharedType.IsAssignableFrom(fieldInfo.FieldType))
                {
                    SharedVariable variable = fieldInfo.GetValue(_object) as SharedVariable;
                    if (variable == null)
                    {
                        variable = Activator.CreateInstance(fieldInfo.FieldType) as SharedVariable;
                        fieldInfo.SetValue(_object, variable);
                    }
                    yield return(variable);

                    continue;
                }
            }
        }
Example #3
0
        /// <summary> 绘制内部所有字段 </summary>
        public static object DrawFields(object _object)
        {
            if (_object == null)
            {
                return(null);
            }

            List <FieldInfo> fields = Utility_Reflection.GetFieldInfos(_object.GetType());

            for (int j = 0; j < fields.Count; j++)
            {
                if (CanDraw(fields[j]))
                {
                    EditorGUI.BeginChangeCheck();
                    object value = EditorGUILayoutExtension.DrawField(fields[j], fields[j].GetValue(_object));
                    if (EditorGUI.EndChangeCheck())
                    {
                        fields[j].SetValue(_object, value);
                        GUI.changed = true;
                    }
                }
            }
            return(_object);
        }
Example #4
0
 public void Initialize(object _target)
 {
     Target = _target;
     Script = EditorUtilityExtension.FindScriptFromType(Target.GetType());
     Fields = Utility_Reflection.GetFieldInfos(Target.GetType()).FindAll(field => EditorGUILayoutExtension.CanDraw(field));
 }
 public List <FieldInfo> GetNodeFieldInfos()
 {
     return(Utility_Reflection.GetFieldInfos(GetType()));
 }