private void DrawNodeInspector(Node node, NodeViewData nodeViewData) { nodeViewData.name = EditorGUILayout.TextField(nodeViewData.name); // Node Delegate Button + Fields EditorGUILayout.BeginVertical((GUIStyle)"InspectorBigBox"); EditorGUILayout.LabelField("Node Delegates:"); foreach (INodeDelegate nodeDelegate in node.GetNodeDelegates()) { Type nodeDelegateType = nodeDelegate.GetType(); EditorGUILayout.BeginVertical((GUIStyle)"InspectorBox"); EditorGUILayout.LabelField(nodeDelegateType.Name, EditorStyles.boldLabel); FieldInfo[] fields = TypeUtil.GetInspectorFields(nodeDelegateType); foreach (FieldInfo field in fields) { EditorGUILayoutUtil.DynamicField(field, nodeDelegate); } EditorGUILayout.EndVertical(); EditorGUILayout.Space(); } if (GUILayout.Button("", (GUIStyle)"AddButton", GUILayout.Width(20.0f), GUILayout.Height(20.0f))) { GenericMenu nodeDelegateMenu = new GenericMenu(); foreach (Type nodeDelegateType in INodeDelegateUtil.ImplementationTypes) { nodeDelegateMenu.AddItem(new GUIContent(nodeDelegateType.Name), false, this.AddNodeDelegateToNode, Tuple.Create(node, nodeDelegateType)); } nodeDelegateMenu.ShowAsContext(); } EditorGUILayout.EndVertical(); EditorGUILayout.Space(); // Node Transitions EditorGUILayout.BeginVertical((GUIStyle)"InspectorBigBox"); EditorGUILayout.LabelField("Transitions:"); IList <NodeTransition> nodeTransitions = this.TargetGraph.GetOutgoingTransitionsForNode(node); foreach (NodeTransition nodeTransition in nodeTransitions) { GUIStyle transitionStyle = this.IsNodeTransitionSelected(nodeTransition) ? (GUIStyle)"SelectedInspectorBox" : (GUIStyle)"InspectorBox"; Rect transitionRect = EditorGUILayout.BeginVertical(transitionStyle, GUILayout.MinHeight(30.0f)); string targetText = ""; targetText += (nodeTransition.targets.Length > 1) ? "Targets: " : "Target: "; targetText += StringUtil.Join(", ", nodeTransition.targets.Select(id => this.GetViewDataForNode(this.TargetGraph.LoadNodeById(id)).name)); EditorGUILayout.LabelField(targetText, GUILayout.Height(30.0f)); Rect editButtonRect = new Rect(new Vector2(transitionRect.x + transitionRect.width - 25.0f, transitionRect.y + 5.0f), new Vector2(20.0f, 20.0f)); if (GUI.Button(editButtonRect, "", (GUIStyle)"EditButton")) { this.StartEditingNodeTransition(node, nodeTransition); } Rect removeButtonRect = new Rect(new Vector2(transitionRect.x + transitionRect.width - 50.0f, transitionRect.y + 5.0f), new Vector2(20.0f, 20.0f)); if (GUI.Button(removeButtonRect, "", (GUIStyle)"RemoveButton")) { this.AddPendingNodeTransitionRemoval(node, nodeTransition); } EditorGUILayout.LabelField("Conditions: "); Transition transition = nodeTransition.transition; transition.WaitForManualExit = EditorGUILayout.Toggle("WaitForManualExit: ", transition.WaitForManualExit); foreach (ITransitionCondition transitionCondition in transition.GetTransitionConditions()) { EditorGUILayout.BeginVertical(transitionStyle); Type transitionConditionType = transitionCondition.GetType(); EditorGUILayout.LabelField(transitionConditionType.Name, EditorStyles.boldLabel); FieldInfo[] fields = TypeUtil.GetInspectorFields(transitionConditionType); foreach (FieldInfo field in fields) { EditorGUILayoutUtil.DynamicField(field, transitionCondition); } EditorGUILayout.EndVertical(); EditorGUILayout.Space(); } if (GUILayout.Button("", (GUIStyle)"AddButton", GUILayout.Width(20.0f), GUILayout.Height(20.0f))) { GenericMenu nodeDelegateMenu = new GenericMenu(); foreach (Type transitionConditionType in TypeUtil <ITransitionCondition> .ImplementationTypes) { nodeDelegateMenu.AddItem(new GUIContent(transitionConditionType.Name), false, this.AddTransitionCondition, Tuple.Create(nodeTransition, transitionConditionType)); } nodeDelegateMenu.ShowAsContext(); } EditorGUILayout.EndVertical(); EditorGUILayout.Space(); } if (GUILayout.Button("", (GUIStyle)"AddButton", GUILayout.Width(20.0f), GUILayout.Height(20.0f))) { this.MakeTransition(node); } EditorGUILayout.EndVertical(); EditorGUILayout.Space(); }