private void ShowChildren(GroupDecider decider) { var selectedTypeIndex = EditorGUILayout.Popup("Children", -1, btTypeNames, GUILayout.ExpandWidth(false)); EditorGUI.indentLevel += 1; for (int i = 0; i < decider.Children.Count; i++) { var child = decider.Children[i]; EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField(" ", GUILayout.Width(10)); if (i > 0) { if (GUILayout.Button("Up", GUILayout.ExpandWidth(false))) { Undo.RecordObject(decider, "Move child up"); var temp = decider.Children[i]; decider.Children[i] = decider.Children[i - 1]; decider.Children[i - 1] = temp; } } if (i < decider.Children.Count - 1) { if (GUILayout.Button("Down", GUILayout.ExpandWidth(false))) { Undo.RecordObject(decider, "Move child down"); var temp = decider.Children[i]; decider.Children[i] = decider.Children[i + 1]; decider.Children[i + 1] = temp; } } GUILayout.Label(" "); if (GUILayout.Button("Delete", GUILayout.ExpandWidth(false))) { Undo.RecordObject(decider, "Delete child"); decider.Children.RemoveAt(i); } EditorGUILayout.EndHorizontal(); ShowTreeNode(child); } EditorGUI.indentLevel -= 1; if (selectedTypeIndex >= 0) { Undo.RecordObject(decider, "add child"); var added = (BehaviorTreeNode)CreateInstance(btTypes[selectedTypeIndex]); decider.Children.Add(added); } }
// Initialize BehaviorTree field internal void Reset() { BehaviorTree = (GroupDecider)ScriptableObject.CreateInstance(typeof(GroupDecider)); }