public override void DrawCurve(BaseNode <C> b) { Rect rect = b.windowRect; rect.y += b.windowRect.height * .5f; rect.width = 1; rect.height = 1; BaseNode <C> e = BehaviorEditor <C> .settings.currentGraph.GetNodeWithIndex(b.enterNode); if (e == null) { BehaviorEditor <C> .settings.currentGraph.DeleteNode(b.id); } else { Color targetColor = Color.green; if (!b.isAssigned || b.isDuplicate) { targetColor = Color.red; } Rect r = e.windowRect; BehaviorEditor <C> .DrawNodeCurve(r, rect, true, targetColor); } if (b.isDuplicate) { return; } if (b.targetNode > 0) { BaseNode <C> t = BehaviorEditor <C> .settings.currentGraph.GetNodeWithIndex(b.targetNode); if (t == null) { b.targetNode = -1; } else { rect = b.windowRect; rect.x += rect.width; Rect endRect = t.windowRect; endRect.x -= endRect.width * .5f; Color targetColor = Color.green; if (t.drawNode is StateNode <C> ) { if (!t.isAssigned || t.isDuplicate) { targetColor = Color.red; } } else { if (!t.isAssigned) { targetColor = Color.red; } else { targetColor = Color.yellow; } } BehaviorEditor <C> .DrawNodeCurve(rect, endRect, false, targetColor); } } }
public override void DrawWindow(BaseNode <C> b) { if (b.stateRef.currentState == null) { EditorGUILayout.LabelField("Add state to modify:"); } else { if (!b.collapse) { } else { b.windowRect.height = 100; } b.collapse = EditorGUILayout.Toggle(" ", b.collapse); } b.stateRef.currentState = (State <C>)EditorGUILayout.ObjectField(b.stateRef.currentState, typeof(State <C>), false); if (b.previousCollapse != b.collapse) { b.previousCollapse = b.collapse; } if (b.stateRef.previousState != b.stateRef.currentState) { //b.serializedState = null; b.isDuplicate = BehaviorEditor <C> .settings.currentGraph.IsStateDuplicate(b); b.stateRef.previousState = b.stateRef.currentState; if (!b.isDuplicate) { Vector3 pos = new Vector3(b.windowRect.x, b.windowRect.y, 0); pos.x += b.windowRect.width * 2; SetupReordableLists(b); //Load transtions for (int i = 0; i < b.stateRef.currentState.transitions.Count; i++) { pos.y += i * 100; BehaviorEditor <C> .AddTransitionNodeFromTransition(b.stateRef.currentState.transitions[i], b, pos); } BehaviorEditor <C> .forceSetDirty = true; } } if (b.isDuplicate) { EditorGUILayout.LabelField("State is a duplicate!"); b.windowRect.height = 100; return; } if (b.stateRef.currentState != null) { b.isAssigned = true; if (!b.collapse) { if (b.stateRef.serializedState == null) { SetupReordableLists(b); // SerializedObject serializedState = new SerializedObject(b.stateRef.currentState); } float standard = 150; b.stateRef.serializedState.Update(); b.showActions = EditorGUILayout.Toggle("Show Actions ", b.showActions); if (b.showActions) { EditorGUILayout.LabelField(""); b.stateRef.onFixedList.DoLayoutList(); EditorGUILayout.LabelField(""); b.stateRef.onUpdateList.DoLayoutList(); standard += 100 + 40 + (b.stateRef.onUpdateList.count + b.stateRef.onFixedList.count) * 20; } b.showEnterExit = EditorGUILayout.Toggle("Show Enter/Exit ", b.showEnterExit); if (b.showEnterExit) { EditorGUILayout.LabelField(""); b.stateRef.onEnterList.DoLayoutList(); EditorGUILayout.LabelField(""); b.stateRef.onExitList.DoLayoutList(); standard += 100 + 40 + (b.stateRef.onEnterList.count + b.stateRef.onExitList.count) * 20; } b.stateRef.serializedState.ApplyModifiedProperties(); b.windowRect.height = standard; } } else { b.isAssigned = false; } }