Esempio n. 1
0
        private Vector2 PlaceGeneNodeKernel(List <UIGeneTreeNode> ends, UIGeneTreeNode node, int depth)
        {
            if (node.ChildGeneNodes.Count == 0)
            {
                //End
                Vector2 p = new Vector2(padding + depth * horizontalSpacing, padding + ends.IndexOf(node) * verticalSpacing);
                node.Position = p;
                return(p);
            }
            else
            {
                Vector2 sum = Vector2.zero;
                int     i   = 0;
                foreach (var child in node.ChildGeneNodes)
                {
                    sum += PlaceGeneNodeKernel(ends, child, depth + 1);
                    i++;
                }

                sum /= i;
                Vector2 p = new Vector2(padding + depth * horizontalSpacing, sum.y);
                node.Position = p;

                foreach (var child in node.ChildGeneNodes)
                {
                    UIGeneTreeEdge e = Instantiate(geneTreeEdgePrefab, elementsRoot).GetComponent <UIGeneTreeEdge>();
                    e.RectTransform.SetAsFirstSibling();
                    e.SetTarget(node, child);
                    treeEdges.Add(e);
                }
                return(p);
            }
        }
Esempio n. 2
0
        private UIGeneTreeNode SetupGeneNodeKernel(List <int> orders, List <UIGeneTreeNode> ends, int depth, Gene gene)
        {
            if (orders.Count <= depth)
            {
                orders.Add(0);
            }

            UIGeneTreeNode n = Instantiate(geneTreeNodePrefab, elementsRoot).GetComponent <UIGeneTreeNode>();

            n.Initialize(this, gene, depth, orders[depth]);
            treeNodes.Add(n);

            orders[depth]++;
            if (gene.ChildGenes.Count == 0)
            {
                ends.Add(n);
            }
            else
            {
                foreach (var child in gene.ChildGenes)
                {
                    var childNode = SetupGeneNodeKernel(orders, ends, depth + 1, child);
                    n.ChildGeneNodes.Add(childNode);
                }
            }

            return(n);
        }