public static Dictionary <Guid, NodeData> Create(FrpGraphContainer frpGraphContainer) { var nodeDict = new Dictionary <Guid, NodeData>(); foreach (var nodeData in frpGraphContainer.FrpNodeData) { nodeDict[new Guid(nodeData.Guid)] = new NodeData { OperatorType = nodeData.OperatorInfo.OperatorName, CodeText = nodeData.CodeText, Return = null, ReturnType = nodeData.OperatorInfo.OperatorReturnType, Arguments = new List <string>() }; } foreach (var nodeLink in frpGraphContainer.NodeLinks) { nodeDict[new Guid(nodeLink.BaseNodeGuid)].Return = nodeLink.ConnectionName; var targetNodeArguments = nodeDict[new Guid(nodeLink.TargetNodeGuid)].Arguments; while (targetNodeArguments.Count < nodeLink.TargetPortNum + 1) { targetNodeArguments.Add(null); } targetNodeArguments[nodeLink.TargetPortNum] = nodeLink.ConnectionName; } return(nodeDict); }
private bool SaveNodes(FrpGraphContainer frpGraphContainer) { if (!Edges.Any()) { return(false); } var edges = Edges.ToArray(); for (var i = 0; i < edges.Length; ++i) { var outputNode = edges[i].output.node as FrpNode; var inputNode = edges[i].input.node as FrpNode; var basePortName = edges[i].output.portName; var basePortNames = new List <string>(); for (int j = 0; j < outputNode.outputContainer.childCount; ++j) { basePortNames.Add(outputNode.outputContainer[j].Q <Port>().portName); } var basePortIndex = basePortNames.FindIndex(x => x == basePortName); var targetPortName = edges[i].input.portName; var targetPortNames = new List <string>(); for (int j = 0; j < inputNode.inputContainer.childCount; ++j) { targetPortNames.Add(inputNode.inputContainer[j].Q <Port>().portName); } var targetPortIndex = targetPortNames.FindIndex(x => x == targetPortName); var connectionName = edges[i].Q <TextField>().value; frpGraphContainer.NodeLinks.Add(new NodeLinkData { ConnectionName = connectionName, BaseNodeGuid = outputNode.frpNodeData.Guid, BasePortName = basePortName, BasePortNum = basePortIndex, TargetNodeGuid = inputNode.frpNodeData.Guid, TargetPortName = targetPortName, TargetPortNum = targetPortIndex }); } foreach (var node in Nodes) { node.frpNodeData.Position = node.GetPosition().position; frpGraphContainer.FrpNodeData.Add(node.frpNodeData.Clone()); } return(true); }
public void LoadGraph(string fileName) { _containerCache = Resources.Load <FrpGraphContainer>(fileName); if (_containerCache == null) { EditorUtility.DisplayDialog("File Not Found", "Target dialogue graph file does not exists!", "OK"); return; } ClearGraph(); CreateNodes(); ConnectNodes(); //CreateExposedProperties(); //GenerateCommentBlocks(); }
private void SaveCommentBlocks(FrpGraphContainer dialogueContainer) { foreach (var block in CommentBlocks) { var nodes = block.containedElements.Where(x => x is FrpNode).Cast <FrpNode>().Select(x => x.frpNodeData.Guid) .ToList(); dialogueContainer.CommentBlockData.Add(new CommentBlockData { ChildNodes = nodes, Title = block.title, Position = block.GetPosition().position }); } }
public static DependencyGraph Create(FrpGraphContainer frpGraphContainer) { var dictionary = new Dictionary <Guid, Node <Guid> >(); var edgeToPort = new Dictionary <Edge, int>(); foreach (var nodeLinkData in frpGraphContainer.NodeLinks) { Guid baseGuid, targetGuid; try { baseGuid = new Guid(nodeLinkData.BaseNodeGuid); targetGuid = new Guid(nodeLinkData.TargetNodeGuid); } catch (Exception e) when( e is ArgumentNullException || e is FormatException || e is OverflowException) { Debug.Log($"Invalid Id string format.\n{e}"); return(null); } var baseNode = dictionary.ContainsKey(baseGuid) ? dictionary[baseGuid] : dictionary[baseGuid] = new Node <Guid>(baseGuid); var targetNode = dictionary.ContainsKey(targetGuid) ? dictionary[targetGuid] : dictionary[targetGuid] = new Node <Guid>(targetGuid); baseNode.OutputLinks.Add(targetNode); targetNode.InputLinks.Add(baseNode); edgeToPort.Add(new Edge(baseGuid, targetGuid), nodeLinkData.BasePortNum); } return(new DependencyGraph { _adjacencyList = dictionary.Values.ToList(), _edgeToPort = edgeToPort }); }
public static IntermediateRepresentation Create(FrpGraphContainer graphContainer) { var depGraph = DependencyGraph.Create(graphContainer); var edgePortPairs = depGraph.CutToAcyclicGraph(); var refEvents = new Dictionary <string, Tuple <string, EventType> >(); var table = NodeDataTable.Create(graphContainer); foreach (var edgePortPair in edgePortPairs) { var name = table[edgePortPair.Edge.Vertex2].Arguments[edgePortPair.Port]; var type = table[edgePortPair.Edge.Vertex1].ReturnType; var refName = ToRefName(name); refEvents[name] = new Tuple <string, EventType>(name, type); table[edgePortPair.Edge.Vertex2].Arguments[edgePortPair.Port] = refName; } var order = depGraph.TopologicalSort(); return(new IntermediateRepresentation { order = order, table = table, refEvents = refEvents.Values.ToList() }); }
private void SaveExposedProperties(FrpGraphContainer dialogueContainer) { dialogueContainer.ExposedProperties.AddRange(_targetGraphView.ExposedProperties); }