void Start()
    {
        world         = FindObjectOfType <World>() as World;
        terrainHolder = FindObjectOfType <TerrainPool>().transform;
        Mesh mesh = this.GetComponent <MeshFilter>().mesh;

        objectPlacement = FindObjectOfType <ObjectPlacement>();
        chunk           = this.GetComponent <Chunk>();

        Vector3 [] verts = mesh.vertices;

        for (int v = 0; v < verts.Length; v++)
        {
            noiseGenereation(verts, v);

            // The pure random function will not work on limitless or cheated terrain as the pos is not saved..
            // Hashtable or Disctionary MAybe? Or another perlin noise?
            if (verts[v].y > .4f && Random.Range(0, 100) <= world.treeDensity)
            {
                GenerateTree(verts, v);
            }

            if (verts[v].y > 0.2f && verts[v].y < 0.3f && Random.Range(0, 100) < world.rockDensity)
            {
                GenerateRock(verts, v);
            }
        }

        mesh.vertices = verts;
        mesh.RecalculateBounds();
        mesh.RecalculateNormals();

        this.gameObject.AddComponent <MeshCollider>();
        objectPlacement.AddToPlacementGrid(mesh, chunk, this.transform);
    }