private void GenerateBush()
    {
        for (int i = 0; i < trees.Count; i++)
        {
            /*List<Vector2> points = PoissonDiscSampling.GeneratePoints(bushRadius, bushArea, 30);
             *
             * for(int j = 0; j < points.Count; j++)
             * {
             *      if(Random.value > bushProbability)
             *      {
             *              Instantiate(bushPrefab, trees[j].transform.position + new Vector3(points[j].x, 0, points[j].y) - new Vector3(bushArea.x * 0.5f, 0, bushArea.y * 0.5f),
             *                      Quaternion.identity);
             *      }
             * }*/

            for (int j = 0; j < 30; j++)
            {
                if (Random.value < bushProbability)
                {
                    continue;
                }

                Vector2 direction = Random.insideUnitCircle * PoissonDiscSampling.NextGaussian() * bushArea;

                Vector3 position = trees[i].transform.position + new Vector3(direction.x, 0, direction.y);
                position.y = trees[i].transform.position.y;

                Instantiate(bushPrefab, position,
                            Quaternion.identity);
            }
        }
    }
    private void GenerateRock()
    {
        for (int i = 0; i < trees.Count; i++)
        {
            for (int j = 0; j < 10; j++)
            {
                if (Random.value < rockProbability)
                {
                    continue;
                }

                Vector2 direction = Random.insideUnitCircle * PoissonDiscSampling.NextGaussian() * rockArea;

                Vector3 position = trees[i].transform.position + new Vector3(direction.x, 0, direction.y);
                position.y = trees[i].transform.position.y;

                Instantiate(rockPrefab, position,
                            Quaternion.identity);
            }
        }
    }