Esempio n. 1
0
 public void InspectNode(BehaviourTree tree, NodeEditor node)
 {
     Clear();
     if (serializedObject != null)
     {
         serializedObject.Dispose();
     }
     this.tree = tree;
     if (!tree.IsInstance)
     {
         global = ZetanUtility.Editor.LoadAsset <GlobalVariables>();
     }
     else
     {
         global = BehaviourManager.Instance.GlobalVariables;
     }
     nodeEditor = node;
     if (tree && nodeEditor != null && nodeEditor.node)
     {
         serializedObject = new SerializedObject(tree);
         SerializedProperty nodes     = serializedObject.FindProperty("nodes");
         IMGUIContainer     container = new IMGUIContainer(() =>
         {
             if (tree && nodeEditor != null && nodeEditor.node)
             {
                 serializedObject.UpdateIfRequiredOrScript();
                 EditorGUI.BeginChangeCheck();
                 EditorGUILayout.LabelField($"[结点名称]\t{nodeEditor.node.name}");
                 EditorGUILayout.LabelField($"[优先级]\t{nodeEditor.node.priority}");
                 var nType     = nodeEditor.node.GetType();
                 var fields    = new HashSet <string>(nType.GetFields(ZetanUtility.CommonBindingFlags).Select(f => f.Name));
                 var fieldsMap = new HashSet <string>();
                 using (SerializedProperty property = nodes.GetArrayElementAtIndex(tree.Nodes.IndexOf(nodeEditor.node)))
                 {
                     using var end = property.GetEndProperty();
                     property.Next(true);
                     while (property.NextVisible(false) && !SerializedProperty.EqualContents(property, end))
                     {
                         string field = property.name;
                         if (field == "name" || field == "priority" || field == "child" || field == "children" || field == "start" ||
                             field == "isRuntime" || field == "isShared" || field == "isGlobal")
                         {
                             continue;
                         }
                         if (fields.Contains(field))
                         {
                             if (fieldsMap.Contains(field))
                             {
                                 break;
                             }
                             fieldsMap.Add(field);
                             var fInfo = nType.GetField(field, ZetanUtility.CommonBindingFlags);
                             DrawProperty(property, fInfo);
                         }
                     }
                 }
                 if (EditorGUI.EndChangeCheck())
                 {
                     serializedObject.ApplyModifiedProperties();
                 }
             }
         });
         Add(container);
     }
 }