public void OnEnable() { if (target == null) { return; } if (variableSceneTypes.Keys.Count == 0 || variableSceneTypes == null) { GetAvailableVariableTypes.GetFlowReactorVariableTypes(out variableSceneTypes); } eventBoard = (EventBoard)target; }
public void OnEnable() { try { data = (FlowReactor.BlackboardSystem.BlackBoard)target; if (variableSceneTypes.Keys.Count == 0 || variableSceneTypes == null) { GetAvailableVariableTypes.GetFlowReactorVariableTypes(out variableSceneTypes); } SetupList(); } catch {} }
void DrawInspectorForNode(Node _node, int _nodeIndex) { if (editorSkin == null) { LoadEditorResources(); } if (_node != null) { if (nodeInspector != null) { // when comment node is selected do not use scroll view // it somehow eats all user input from the canvas. Therefore delete button would not work if (_node.nodeData.nodeType == NodeAttributes.NodeType.Comment) { } else { using (var _scrollView = new EditorGUILayout.ScrollViewScope(nodeInspectorScrollPosition)) { nodeInspectorScrollPosition = _scrollView.scrollPosition; using (new GUILayout.HorizontalScope("ToolbarButton")) { foldoutNodeInfo = EditorGUILayout.Foldout(foldoutNodeInfo, _node.nodeData.title); } if (foldoutNodeInfo) { using (new GUILayout.VerticalScope("Box")) { GUILayout.Label("Node type", GUILayout.Width(100)); GUILayout.Label(_node.nodeData.typeName, "TextArea"); GUILayout.Label("Title"); using (new GUILayout.HorizontalScope()) { if (!editNodeTitle) { GUI.enabled = editNodeTitle; _node.nodeData.title = GUILayout.TextField(_node.nodeData.title); GUI.enabled = true; if (GUILayout.Button(editIcon, GUILayout.Width(20), GUILayout.Height(20))) { editNodeTitle = true; newNodeTitle = _node.nodeData.title; } } else { newNodeTitle = GUILayout.TextField(newNodeTitle); if (!string.IsNullOrEmpty(newNodeTitle)) { if (GUILayout.Button(okIcon, GUILayout.Width(20), GUILayout.Height(20))) { if (rootGraph.exposedNodeVariables.ContainsKey(_node.nodeData.title)) { // Update node title and exposed variables if (!rootGraph.exposedNodeVariables.ContainsKey(newNodeTitle)) { rootGraph.exposedNodeVariables.UpdateKey(_node.nodeData.title, newNodeTitle); _node.nodeData.title = newNodeTitle; List <FRVariable> _nodeVariables = new List <FRVariable>(); FlowReactor.Editor.GetAvailableVariableTypes.GetAllFRVariablesOnNode(_node, out _nodeVariables); for (int v = 0; v < _nodeVariables.Count; v++) { if (_nodeVariables[v].type == FRVariable.VariableType.exposed) { _nodeVariables[v].exposedNodeName = newNodeTitle; } } editNodeTitle = false; } else { if (_node.nodeData.title != newNodeTitle) { EditorUtility.DisplayDialog("Node title already exists", "Title: " + newNodeTitle + " already exists!" + "\nThis node has exposed variables, therefore the new title must be unique to make sure it does not collide with another exposed node with the same title.", "ok"); editNodeTitle = false; } else { editNodeTitle = false; } } } else { _node.nodeData.title = newNodeTitle; } editNodeTitle = false; } } if (GUILayout.Button(cancelIcon, GUILayout.Width(20), GUILayout.Height(20))) { editNodeTitle = false; } } } GUILayout.Label("Description"); _node.nodeData.description = GUILayout.TextArea(_node.nodeData.description, GUILayout.Height(50)); if (GUILayout.Button("Clear")) { _node.nodeData.description = ""; } } } // Default node inspector #if FLOWREACTOR_DEBUG // Always draw default inspector in debug mode _node.disableDefaultInspector = false; GUI.color = Color.yellow; GUILayout.Label("DEBUG MODE:"); GUI.color = Color.white; #endif if (!_node.disableDefaultInspector) { EditorHelpers.DrawUILine(); using (new GUILayout.VerticalScope(editorSkin.GetStyle("BoxLine"))) { NodeDefaultInspector.DrawDefaultInspectorWithoutScriptField(nodeInspector); //nodeInspector.DrawDefaultInspector(); } } //if (nodeVariableFields == null || nodeVariableFields.Length == 0) //{ // GetAvailableNodeVariables(_node); //} //for (int f = 0; f < nodeVariableFields.Length; f ++) //{ // if (nodeVariableFields[f].FieldType == typeof(FlowReactor.Nodes.Modules.FRNodeEventDispatch)) // { // GUILayout.Label("EVENTBOARD"); // var _module = nodeVariableFields[f].GetValue(_node) as FlowReactor.Nodes.Modules.FRNodeEventDispatch; // //_eventBoard = EditorGUILayout.ObjectField(_eventBoard, typeof(EventBoard), false) as EventBoard; // var _lr = GUILayoutUtility.GetLastRect(); // //nodeVariableFields[f].SetValue(_node, (object)_eventBoard); // FRNodeEventDispatcherEditor.DrawEditor(_module, _node.rootGraph, _lr); // } //} if (!_node.disableDrawCustomInspector) { EditorHelpers.DrawUILine(); using (new GUILayout.VerticalScope(editorSkin.GetStyle("BoxLine"))) { if (_node != null) { _node.DrawCustomInspector(); } } } if (!_node.disableVariableInspector) { EditorHelpers.DrawUILine(); using (new GUILayout.VerticalScope(editorSkin.GetStyle("BoxLine"))) { // Get all available variable types if (variableLocalTypes.Keys.Count == 0 || variableLocalTypes == null) { GetAvailableVariableTypes.ReturnExistingTypesOfType <FRVariable>(out variableLocalTypes); } GUILayout.Label("Variables:", "boldLabel"); _node.DrawNodeVariables(true); } } GUILayout.Space(25); //using (new GUILayout.HorizontalScope("toolbar")) //{ // selectedInspectorPanelNode = GUILayout.SelectionGrid(selectedInspectorPanelNode, inspectorPanelOptions, 7, GUI.skin.GetStyle("toolbarButton")); //} } } } } }
public static void UpdateGraph(Graph graph) { if (graph.version != EditorHelpers.GetEditorVersion() || string.IsNullOrEmpty(graph.version)) { if (EditorHelpers.GetEditorVersion() == "version 1.2.0" || EditorHelpers.GetEditorVersion() == "version 1.2.0p1" || EditorHelpers.GetEditorVersion() == "version 1.2.0p2") { // update nodes name to title ////////////////////////////// for (int n = 0; n < graph.nodes.Count; n++) { if (string.IsNullOrEmpty(graph.nodes[n].nodeData.title)) { graph.nodes[n].nodeData.title = graph.nodes[n].nodeData.name; graph.nodes[n].nodeData.typeName = graph.nodes[n].nodeData.name; } } // check if nodevariables connected to blackboard variables are correctly registered to the connected node list ////////////////////////////// for (int n = 0; n < graph.nodes.Count; n++) { List <FRVariable> _nodeVariables; GetAvailableVariableTypes.GetAllFRVariablesOnNode(graph.nodes[n], out _nodeVariables); for (int v = 0; v < _nodeVariables.Count; v++) { if (_nodeVariables[v].type == FRVariable.VariableType.blackboard) { // loop through all blackboards in graph and check if node is assigned to the connected nodes list of the blackboard variable foreach (var bbKey in graph.rootGraph.blackboards.Keys) { foreach (var bbVarKey in graph.rootGraph.blackboards[bbKey].blackboard.variables.Keys) { if (_nodeVariables[v].variableGuid == bbVarKey.ToString()) { bool _assigned = false; if (graph.rootGraph.blackboards[bbKey].blackboard.variables[bbVarKey].connectedNodes == null) { graph.rootGraph.blackboards[bbKey].blackboard.variables[bbVarKey].connectedNodes = new List <Nodes.Node>(); } for (int c = 0; c < graph.rootGraph.blackboards[bbKey].blackboard.variables[bbVarKey].connectedNodes.Count; c++) { if (graph.rootGraph.blackboards[bbKey].blackboard.variables[bbVarKey].connectedNodes[c] == null) { graph.rootGraph.blackboards[bbKey].blackboard.variables[bbVarKey].connectedNodes.RemoveAt(c); } else { if (graph.rootGraph.blackboards[bbKey].blackboard.variables[bbVarKey].connectedNodes[c].node == graph.nodes[n]) { _assigned = true; } } } if (!_assigned) { graph.rootGraph.blackboards[bbKey].blackboard.variables[bbVarKey].connectedNodes.Add(graph.nodes[n]); } } } } } } } for (int s = 0; s < graph.subGraphs.Count; s++) { graph.subGraphs[s].UpdateGraph(graph.subGraphs[s]); } graph.version = EditorHelpers.GetEditorVersion(); #if FLOWREACTOR_DEBUG Debug.Log("FlowReactor: Graph - " + graph.name + " has been updated to: " + graph.version); #endif } } }