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); } }
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); }