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);
                }
            }
        }
コード例 #2
0
 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();
         }
     }
 }
コード例 #3
0
    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);
        }
    }
コード例 #4
0
    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);
        }
    }
コード例 #5
0
 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();
         }
     }
 }
コード例 #6
0
    public bool eat(Vector2 pos)
    {
        float d = P5JSExtension.dist(x, y, pos.x, pos.y);

        if (d < 1)
        {
            total++;
            return(true);
        }
        else
        {
            return(false);
        }
    }