void PlantTrees() {
Random treeRand = new Random( random.Next() );
int maxTrees = genParams.MapWidth*genParams.MapLength/genParams.TreeClusterDensity;
for( int cluster = 0; cluster < maxTrees; cluster++ ) {
int clusterX = treeRand.Next( genParams.MapWidth );
int clusterY = treeRand.Next( genParams.MapLength );
for( int tree = 0; tree < genParams.TreeChainsPerCluster; tree++ ) {
int x = clusterX;
int y = clusterY;
for( int hop = 0; hop < genParams.TreeHopsPerChain; hop++ ) {
x += treeRand.Next( genParams.TreeSpread ) - treeRand.Next( genParams.TreeSpread );
y += treeRand.Next( genParams.TreeSpread ) - treeRand.Next( genParams.TreeSpread );
if( (x < 0) || (y < 0) || (x >= genParams.MapWidth) || (y >= genParams.MapLength) )
continue;
if( treeRand.Next( genParams.TreePlantRatio ) != 0 )
continue;
int z = heightmap[(x + y*genParams.MapWidth)] + 1;
GrowTree( treeRand, x, y, z );
}
}
}
}