WormCaveGenerator.h 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. #pragma once
  2. #include <Array.h>
  3. #include <Punkt.h>
  4. #include <Vec3.h>
  5. #include "CaveGenerator.h"
  6. #include "Noise.h"
  7. class NoiseWorm3D : public Framework::ReferenceCounter
  8. {
  9. private:
  10. Framework::Punkt startChunk;
  11. Framework::Vec3<int> minAffected;
  12. Framework::Vec3<int> maxAffected;
  13. float* keyPoints;
  14. float* keyPointSize;
  15. int keyPointCount;
  16. NoiseWorm3D();
  17. public:
  18. NoiseWorm3D(Noise* pitch,
  19. Noise* yaw,
  20. Noise* size,
  21. Framework::Vec3<int> startPos,
  22. int distant,
  23. int minRad,
  24. int maxRad);
  25. ~NoiseWorm3D();
  26. const Framework::Punkt& getStartChunkCenter();
  27. void getPartAffectedByChunk(
  28. int x, int y, Framework::RCArray<NoiseWorm3D>* zResult);
  29. bool isInside(int x, int y, int z);
  30. };
  31. class WormCaveChunkGenerator : public CaveChunkGenerator
  32. {
  33. private:
  34. Framework::RCArray<NoiseWorm3D> worms;
  35. public:
  36. WormCaveChunkGenerator(Framework::RCArray<NoiseWorm3D> worms);
  37. bool isInCave(int x, int y, int z) override;
  38. };
  39. class WormCaveGenerator : public CaveGenerator
  40. {
  41. private:
  42. int maxDistant;
  43. int minDistant;
  44. int maxRadius;
  45. int minRadius;
  46. float cavePosibillity;
  47. Noise* wormStartNoise;
  48. Framework::RCArray<NoiseWorm3D> cache;
  49. NoiseWorm3D* zWormOfChunk(int x, int y);
  50. public:
  51. WormCaveGenerator(int minDistant,
  52. int maxDistant,
  53. int minRadius,
  54. int maxRadius,
  55. float cavePosibillityPerChunk,
  56. int seed);
  57. ~WormCaveGenerator();
  58. CaveChunkGenerator* getGeneratorForChunk(int x, int y) override;
  59. };