コード例 #1
0
        public ISuperNode CreateSuperNode(INode node)
        {
            ISuperNode sn = CreateSuperNode();

            sn.Nodes.Add(node);
            return(sn);
        }
コード例 #2
0
 /// <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);
             }
         }
     }
 }
コード例 #3
0
        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;
            }
        }
コード例 #4
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);
     }
 }
コード例 #5
0
 /// <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);
             }
         }
     }
 }