Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private void GenerateTrees()
- {
- int numberOfTrees = r.Next(100, 2000);
- double treeSpacing = 0.95 - (numberOfTrees * 0.0002);
- tree = new Tree[numberOfTrees];
- noiseArray = Heightmap.generateByteArray(terrainWidth, terrainHeight, 1f);
- // Find the highest point in the noise heightmap
- byte maxValue = byte.MinValue;
- for (int i = 0; i < noiseArray.Length; i++)
- {
- if (noiseArray[i] > maxValue)
- maxValue = noiseArray[i];
- }
- for (int i = 0; i < numberOfTrees; i++)
- {
- bool validPos = false;
- while (!validPos)
- {
- int xOnHeightmap = r.Next(0, terrainWidth);
- int zOnHeightmap = r.Next(0, terrainHeight);
- byte byteValue = noiseArray[xOnHeightmap * terrainWidth + zOnHeightmap];
- byte rValue = (byte)r.Next(byteValue, maxValue);
- if (byteValue > maxValue * treeSpacing && rValue > maxValue * 0.95)
- {
- float x = xOnHeightmap - (terrainWidth / 2);
- float z = zOnHeightmap - (terrainHeight / 2);
- float y = heightData[xOnHeightmap, zOnHeightmap];
- tree[i].position = new Vector3(x, y, z);
- validPos = true;
- for (int ii = 0; ii < numberOfTrees; ii++)
- {
- float distance = Vector3.Distance(tree[i].position, tree[ii].position);
- if (i != ii && distance < 1)
- {
- Console.WriteLine("Distance between tree " + i + " and tree " + ii + " is " + distance + ", regenerating");
- validPos = false;
- break;
- }
- }
- }
- }
- tree[i].size = r.NextDouble() * 0.01;
- tree[i].treeType = (byte)r.Next(0, 6);
- tree[i].treeModel = treeModel[tree[i].treeType];
- tree[i].health = 100f;
- tree[i].rotation = MathHelper.ToRadians(r.Next(0, 360));
- // Scales and positions the bounding sqhere so it fits with the tree model
- worldMatrix = Matrix.CreateScale((float)tree[i].size) * Matrix.CreateTranslation(tree[i].position);
- tree[i].treeSqhere = tree[i].treeModel.TrunkMesh.BoundingSphere.Transform(worldMatrix);
- validPos = false;
- }
- Console.WriteLine(numberOfTrees + " trees generated. Treespacing: " + treeSpacing);
- }
Add Comment
Please, Sign In to add comment