Advertisement
logancberrypie

terrain gen plan

Sep 7th, 2020
47
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.16 KB | None | 0 0
  1. //generate maps
  2. //generate biome map for each point [x,y] bestBiome, bestD, secondBiome, secondD [only need to check four biomes]
  3. //create Splatmap with textures, noise and blending
  4. //create detail map depending on biome
  5. //modify height map by biome heightmaps
  6. //smooth heightmaps
  7. //apply heightmap / splat / detail
  8.  
  9. public void controller()
  10. {
  11. heightMap = Generate.generate(settings); //O(n2)
  12. colorMap = Generate.generate(settings); //O(n2)
  13. moistureMap = Generate.generate(Settings); //O(n2)
  14. tempetureMap = Generate.generate(settings); //O(n2)
  15.  
  16. Dictionar BiomeHData = Biome -> BiomeHeightMapArray
  17.  
  18. BiomeMap = CalculateBiomeMap(moistureMap, tempetureMap, BiomeTable); //o(30n2)
  19.  
  20. GenerateBiomeData();
  21. GenerateTextureTerrainLayers();
  22. SplatMap = CalculateSplatMap(Settings); //o(t*n2)
  23. DetailMap = CalculateDetailMap(settings); //o(n2)
  24.  
  25. float[] secondHeightMap = AddBiomesToHeightMap(settings);
  26. float[] finalHeightMap = smoothHeightMap(settings); //must also normalise
  27.  
  28. //apply everything!
  29. }
  30.  
  31. private AddBiomesToHeightMap(settings)
  32. {
  33. float[,] final = new float[x,y];
  34. for (x in width)
  35. {
  36. for (y in height)
  37. {
  38. float mainBiomeDistance = BiomeMap[x,y].RealDistanceData;
  39. float closeBiomeDistance = BiomeMap[x,y].closeBiomeDistance;
  40.  
  41. float sum = mainBiomeDistance + closeBiomeDistance;
  42. float firstRatio = closeBiomeDistance / sum;
  43. float secondRatio = mainBiomeDistance / sum;
  44.  
  45. float firstCalc = firstRatio * mainBiome.biomeHMod * biomeHeightMap[mainBiome][x,y];
  46. float secondCalc = secondRatio * closeBiome.biomeHMod * biomeHeightMap[closeBiome][x,y];
  47. final[x,y] = height[x,y] + firstCalc + secondCalc;
  48. }
  49. }
  50. return final;
  51. }
  52.  
  53.  
  54. public BiomeFloatStruct[] BiomeMap(settings) //o(xy[2b+20])
  55. {
  56. BiomeFloatStruct[,] final = new BiomeFloatStruct[x,y];
  57. for (x = 0; x<moistureMap.Lenght;x++)
  58. {
  59. for (y = 0;y<tempetureMap.Lenght;y++)
  60. {
  61. //find closest biome, distanceData
  62. //find second closest biome , distanceData
  63. BiomeFloatStruct biomes = getBiomeMap(tempetureMap[t,m],moistureMap[x,y],BiomeTable); //o(2b+20)
  64. final[x.y] = biomes; //o(1)
  65. }
  66. }
  67. return final;
  68. }
  69. private BiomeFloatStruct getBiomeMap(settings) //o(2b + 20)
  70. {
  71. Node tree = treeNode;
  72. List<TempEnum> temps = getEnums<TempEnum>(t); //o(b)
  73. List<MoistureEnum> moist = getEnums<MoistureEnum>(m); //o(b)
  74.  
  75. correctBiome = BiomeTable[temps[0],moist[0]); //o(1)
  76. correctD = Mathf.pow(temps[0].val - t,2) + Mathf.Pow(moist[0]val - m,2); //o(1)
  77. //loop through all 9 possibilities and get closest
  78. closestBiome = get; //o(9)
  79. closestD = get;
  80. return {new BiomeFloatStruct(data)}; //o(1)
  81.  
  82. }
  83. private List<enums> getEnums<enums>(t)
  84. {
  85. Enum correct;
  86. Enum closest1;
  87. Enum closest2;
  88. for (i = 0;enums[].lenght;i++)
  89. {
  90. if (enums[i+1] > t)
  91. {
  92. correct = enums[i];
  93. closest1 = enums[i+1];
  94. closest2 = enums[i-1];
  95. }
  96. }
  97. return {correct, closest1, closest2}
  98. }
  99.  
  100.  
  101.  
  102.  
  103. struct BiomeFloatStruct
  104. {
  105. Biome RealBiomeData;
  106. float RealDistanceData;
  107. Biome ClosestBiomeData;
  108. float ClosestDistanceData;
  109. }
  110.  
  111. class Node
  112. {
  113. //standard tree implementation
  114. // choose median and split in half each time
  115. }
  116.  
  117.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement