worldGeneratorSettings.h 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. #pragma once
  2. #include <FastNoiseSIMD.h>
  3. #include <splines.h>
  4. #include <string>
  5. const int PLAINS_HEIGHT_INDEX = 2;
  6. struct NoiseSetting
  7. {
  8. float scale = 0.35;
  9. int type = FastNoiseSIMD::NoiseType::SimplexFractal;
  10. int cellularReturnType = FastNoiseSIMD::CellularReturnType::Distance;
  11. float frequency = 0.015;
  12. int octaves = 3;
  13. int perturbFractalOctaves = 0;
  14. float power = 1;
  15. Spline spline;
  16. std::string saveSettings(int tabs, bool saveSpline = true);
  17. void sanitize();
  18. };
  19. struct WorldGeneratorSettings
  20. {
  21. int seed = 1234;
  22. NoiseSetting continentalnessNoiseSettings;
  23. NoiseSetting continentalness2NoiseSettings;
  24. NoiseSetting continentalnessPickSettings;
  25. NoiseSetting peaksAndValies;
  26. NoiseSetting randomHills;
  27. NoiseSetting wierdness;
  28. NoiseSetting stone3Dnoise;
  29. NoiseSetting riversNoise;
  30. NoiseSetting roadsNoise;
  31. NoiseSetting spagettiNoise;
  32. NoiseSetting hillsDrops;
  33. NoiseSetting randomSand;
  34. NoiseSetting stonePatches;
  35. NoiseSetting treesAmountNoise;
  36. NoiseSetting lakesNoise;
  37. NoiseSetting treesTypeNoise;
  38. NoiseSetting cavesNoise;
  39. NoiseSetting swampNoise;
  40. NoiseSetting stoneSpikesNoise;
  41. NoiseSetting swampMask;
  42. NoiseSetting stoneSpikeMask;
  43. NoiseSetting iceNoise;
  44. bool isSuperFlat = 0;
  45. //todo remove
  46. Spline peaksAndValiesContributionSpline;
  47. Spline regionsHeightSpline;
  48. NoiseSetting vegetationNoise;
  49. std::string saveSettings();
  50. void sanitize();
  51. bool loadSettings(const char *data);
  52. };
  53. namespace gl2d
  54. {
  55. struct Texture;
  56. };
  57. struct WorldGenerator
  58. {
  59. FastNoiseSIMD *regionsHeightNoise = 0;
  60. FastNoiseSIMD *regionsHeightTranzition = 0;
  61. FastNoiseSIMD *regionsRandomNumber = 0;
  62. FastNoiseSIMD *regionsX = 0;
  63. FastNoiseSIMD *regionsZ = 0;
  64. Spline regionsHeightSplines;
  65. //
  66. FastNoiseSIMD *continentalnessNoise;
  67. Spline continentalSplines;
  68. float continentalPower = 1.f;
  69. FastNoiseSIMD *continentalness2Noise;
  70. Spline continental2Splines;
  71. float continental2Power = 1.f;
  72. FastNoiseSIMD *continentalnessPickNoise;
  73. Spline continentalnessPickSplines;
  74. float continentalnessPickPower = 1.f;
  75. FastNoiseSIMD *peaksValiesNoise;
  76. Spline peaksValiesSplines;
  77. Spline peaksValiesContributionSplines;
  78. float peaksValiesPower = 1.f;
  79. FastNoiseSIMD *randomHillsNoise;
  80. Spline randomHillsSplines;
  81. float randomHillsPower = 1.f;
  82. FastNoiseSIMD *swampNoise;
  83. Spline swampSplines;
  84. float swampPower = 1.f;
  85. FastNoiseSIMD *swampMask;
  86. Spline swampMaskSplines;
  87. float swampMaskPower = 1.f;
  88. FastNoiseSIMD *stoneSpikesNoise;
  89. Spline stoneSpikesSplines;
  90. float stoneSpikesPower = 1.f;
  91. FastNoiseSIMD *stoneSpikesMask;
  92. Spline stoneSpikesMaskSplines;
  93. float stoneSpikesMaskPower = 1.f;
  94. FastNoiseSIMD *iceNoise;
  95. Spline iceNoiseSplines;
  96. float iceNoisePower = 1.f;
  97. FastNoiseSIMD *wierdnessNoise;
  98. Spline wierdnessSplines;
  99. //Spline oceansAndTerasesContributionSplines;
  100. float wierdnessPower = 1.f;
  101. FastNoiseSIMD *stone3Dnoise;
  102. Spline stone3DnoiseSplines;
  103. float stone3Dpower = 1.f;
  104. FastNoiseSIMD *spagettiNoise;
  105. Spline spagettiNoiseSplines;
  106. float spagettiNoisePower = 1.f;
  107. FastNoiseSIMD *riversNoise;
  108. Spline riversSplines;
  109. float riversPower = 1.f;
  110. FastNoiseSIMD *cavesNoise;
  111. Spline cavesSpline;
  112. float cavesPower = 1.f;
  113. FastNoiseSIMD *treesAmountNoise;
  114. Spline treesAmountSpline;
  115. float treesAmountPower = 1.f;
  116. FastNoiseSIMD *treesTypeNoise;
  117. Spline treesTypeSpline;
  118. float treesTypePower = 1.f;
  119. FastNoiseSIMD *hillsDropsNoise;
  120. Spline hillsDropsSpline;
  121. float hillsDropsPower = 1.f;
  122. FastNoiseSIMD *stonePatchesNoise;
  123. Spline stonePatchesSpline;
  124. float stonePatchesPower = 1.f;
  125. FastNoiseSIMD *roadNoise;
  126. Spline roadSplines;
  127. float roadPower = 1.f;
  128. FastNoiseSIMD *lakesNoise;
  129. Spline lakesSplines;
  130. float lakesPower = 1.f;
  131. FastNoiseSIMD *whiteNoise;
  132. FastNoiseSIMD *whiteNoise2;
  133. FastNoiseSIMD *randomStonesNoise;
  134. FastNoiseSIMD *randomSandPatchesNoise;
  135. Spline randomSandSplines;
  136. float randomSandPower = 1.f;
  137. FastNoiseSIMD *alternativePatchesOfBlocks;
  138. bool isSuperFlat = 0;
  139. void init();
  140. void clear();
  141. void applySettings(WorldGeneratorSettings &s);
  142. int getRegionHeightForChunk(int chunkX, int chunkZ);
  143. int getRegionHeightAndBlendingsForChunk(int chunkX, int chunkZ, float values[16*16],
  144. float borderingFactor[16 * 16], float &vegetationMaster, float tightBorders[16 * 16],
  145. float &xValuue, float &zValue, float &biomeTypeRandomValue
  146. );
  147. //this isn't game accurate!
  148. void generateChunkPreview(gl2d::Texture &t, glm::ivec2 size, glm::ivec2 pos);
  149. };