public Tree() { leaves = new List <Leaf>(); branches = new List <Branch>(); for (var i = 0; i < 1500; i++) { this.leaves.Add(new Leaf()); } pos = new Vector2(P5JSExtension.width / 2, P5JSExtension.height); dir = new Vector2(0, -1); root = new Branch(null, pos, dir); branches.Add(root); var current = root; var found = false; while (!found) { for (var i = 0; i < leaves.Count; i++) { var d = P5JSExtension.dist(current.pos, leaves[i].pos); if (d < Fractal_Trees_Space_Colonization.max_dist) { found = true; } } if (!found) { var branch = current.next(); current = branch; branches.Add(current); } } }
public void grow() { for (var i = 0; i < leaves.Count; i++) { var leaf = leaves[i]; Branch closestBranch = null; var record = Fractal_Trees_Space_Colonization.max_dist; for (var j = 0; j < branches.Count; j++) { var branch = branches[j]; var d = P5JSExtension.dist(leaf.pos, branch.pos); if (d < Fractal_Trees_Space_Colonization.min_dist) { leaf.reached = true; closestBranch = null; break; } else if (d < record) { closestBranch = branch; record = d; } } if (closestBranch != null) { var newDir = leaf.pos - closestBranch.pos; newDir.Normalize(); closestBranch.dir += newDir; closestBranch.count++; } } for (var i = leaves.Count - 1; i >= 0; i--) { if (leaves[i].reached) { leaves.RemoveAt(i); } } for (var i = branches.Count - 1; i >= 0; i--) { var branch = branches[i]; if (branch.count > 0) { branch.dir /= branch.count + 1; Vector3 rand = P5JSExtension.random3D(); rand.setMag(0.3f); branch.dir += rand; this.branches.Add(branch.next()); branch.reset(); } } }
public bool clicked(float x, float y) { var d = P5JSExtension.dist(pos.x, pos.y, x, y); if (d < r) { return(true); } else { return(false); } }
public bool hits(Flower flower) { var d = P5JSExtension.dist(x, y, flower.x, flower.y); if (d < r + flower.r) { return(true); } else { return(false); } }
public void death() { for (int i = 0; i < tail.Count; i++) { Vector2 pos = tail[i]; var d = P5JSExtension.dist(x, y, pos.x, pos.y); if (d < 1) { Debug.Log("starting over"); total = 0; tail.Clear(); } } }
public bool eat(Vector2 pos) { float d = P5JSExtension.dist(x, y, pos.x, pos.y); if (d < 1) { total++; return(true); } else { return(false); } }