Guest User

Untitled

a guest
Jan 18th, 2019
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.81 KB | None | 0 0
  1. private void GenerateTrees()
  2. {
  3. int numberOfTrees = r.Next(100, 2000);
  4. double treeSpacing = 0.95 - (numberOfTrees * 0.0002);
  5. tree = new Tree[numberOfTrees];
  6. noiseArray = Heightmap.generateByteArray(terrainWidth, terrainHeight, 1f);
  7.  
  8. // Find the highest point in the noise heightmap
  9. byte maxValue = byte.MinValue;
  10. for (int i = 0; i < noiseArray.Length; i++)
  11. {
  12. if (noiseArray[i] > maxValue)
  13. maxValue = noiseArray[i];
  14. }
  15.  
  16. for (int i = 0; i < numberOfTrees; i++)
  17. {
  18. bool validPos = false;
  19.  
  20. while (!validPos)
  21. {
  22. int xOnHeightmap = r.Next(0, terrainWidth);
  23. int zOnHeightmap = r.Next(0, terrainHeight);
  24.  
  25. byte byteValue = noiseArray[xOnHeightmap * terrainWidth + zOnHeightmap];
  26. byte rValue = (byte)r.Next(byteValue, maxValue);
  27.  
  28. if (byteValue > maxValue * treeSpacing && rValue > maxValue * 0.95)
  29. {
  30. float x = xOnHeightmap - (terrainWidth / 2);
  31. float z = zOnHeightmap - (terrainHeight / 2);
  32. float y = heightData[xOnHeightmap, zOnHeightmap];
  33.  
  34. tree[i].position = new Vector3(x, y, z);
  35. validPos = true;
  36.  
  37. for (int ii = 0; ii < numberOfTrees; ii++)
  38. {
  39. float distance = Vector3.Distance(tree[i].position, tree[ii].position);
  40.  
  41. if (i != ii && distance < 1)
  42. {
  43. Console.WriteLine("Distance between tree " + i + " and tree " + ii + " is " + distance + ", regenerating");
  44. validPos = false;
  45. break;
  46. }
  47. }
  48. }
  49. }
  50.  
  51. tree[i].size = r.NextDouble() * 0.01;
  52. tree[i].treeType = (byte)r.Next(0, 6);
  53. tree[i].treeModel = treeModel[tree[i].treeType];
  54. tree[i].health = 100f;
  55. tree[i].rotation = MathHelper.ToRadians(r.Next(0, 360));
  56.  
  57. // Scales and positions the bounding sqhere so it fits with the tree model
  58. worldMatrix = Matrix.CreateScale((float)tree[i].size) * Matrix.CreateTranslation(tree[i].position);
  59. tree[i].treeSqhere = tree[i].treeModel.TrunkMesh.BoundingSphere.Transform(worldMatrix);
  60.  
  61. validPos = false;
  62. }
  63.  
  64. Console.WriteLine(numberOfTrees + " trees generated. Treespacing: " + treeSpacing);
  65. }
Add Comment
Please, Sign In to add comment