public ISuperNode CreateSuperNode(INode node) { ISuperNode sn = CreateSuperNode(); sn.Nodes.Add(node); return(sn); }
/// <summary> /// Find all node connection include first node. /// </summary> /// <param name="node"></param> /// <param name="allNode"></param> /// <param name="includeSuperNode"></param> public static void FindAllNodeConnection(NodeComponent node, ref HashSet <NodeComponent> allNode, bool includeSuperNode = true) { if (node != null && !allNode.Contains(node)) { allNode.Add(node); var nodes = GetFlowConnection(node); if (nodes != null) { foreach (var n in nodes) { if (n) { FindAllNodeConnection(n, ref allNode, includeSuperNode); } } } if (includeSuperNode && node is ISuperNode) { ISuperNode superNode = node as ISuperNode; foreach (var n in superNode.nestedFlowNodes) { FindAllNodeConnection(n, ref allNode, includeSuperNode); } } } }
private void ConnectByEdge(IEdge edge) { ISuperNode endANode = this.superNodeCache[edge.EndA.Id]; ISuperNode endBNode = this.superNodeCache[edge.EndB.Id]; if (endANode == endBNode) { // do not connect the same supernodes to themselves return; } // edges between supernodes are not duplicated. weight represent // number of edges var result = endANode.IsNeighbour(endBNode); if (result.Success) { result.Edge.Weight += 1.0; } else { var newedge = endANode.ConnectTo(endBNode, EdgeDirection.Both); newedge.Weight = 1.0; } }
private static void ConnectNode(NodeComponent node) { if (node != null && !generatorData.connectedNode.Contains(node)) { generatorData.connectedNode.Add(node); var nodes = GetConnections(node); if (nodes != null) { foreach (NodeComponent n in nodes) { if (n) { ConnectNode(n); } } } if (node is ISuperNode) { ISuperNode superNode = node as ISuperNode; foreach (var n in superNode.nestedFlowNodes) { if (n != null) { ConnectNode(n); } } } Func <object, bool> validation = delegate(object obj) { if (obj is MemberData) { MemberData member = obj as MemberData; if (member.IsTargetingPinOrNode) { ConnectNode(member.GetTargetNode()); } } return(false); }; AnalizerUtility.AnalizeObject(node, validation); } }
/// <summary> /// Find all node connection after coroutine node. /// </summary> /// <param name="node"></param> /// <param name="allNode"></param> /// <param name="includeSuperNode"></param> /// <param name="includeCoroutineEvent"></param> public static void FindFlowConnectionAfterCoroutineNode(NodeComponent node, ref HashSet <NodeComponent> allNode, bool includeSuperNode = true, bool includeCoroutineEvent = true, bool passCoroutine = false) { if (node != null && !allNode.Contains(node)) { bool isCoroutineNode = node.IsSelfCoroutine(); if (!passCoroutine && isCoroutineNode) { passCoroutine = true; } if (passCoroutine && (!isCoroutineNode || includeCoroutineEvent)) { allNode.Add(node); } var nodes = GetFlowConnection(node); if (nodes != null) { foreach (Node n in nodes) { if (n) { FindFlowConnectionAfterCoroutineNode(n, ref allNode, includeSuperNode, includeCoroutineEvent, passCoroutine); } } } if (includeSuperNode && node is ISuperNode) { ISuperNode superNode = node as ISuperNode; foreach (var n in superNode.nestedFlowNodes) { FindFlowConnectionAfterCoroutineNode(n, ref allNode, includeSuperNode, includeCoroutineEvent, passCoroutine); } } } }