WormCaveGenerator.h 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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. Framework::Array<Framework::Vec3<float>> keyPoints;
  14. Framework::Array<float> size;
  15. NoiseWorm3D();
  16. public:
  17. NoiseWorm3D(Noise* pitch,
  18. Noise* yaw,
  19. Noise* size,
  20. Framework::Vec3<int> startPos,
  21. int distant,
  22. int minRad,
  23. int maxRad);
  24. Framework::Punkt getStartChunkCenter();
  25. void getPartAffectedByChunk(
  26. int x, int y, Framework::RCArray<NoiseWorm3D>* zResult);
  27. bool isInside(int x, int y, int z);
  28. };
  29. class WormCaveChunkGenerator : public CaveChunkGenerator
  30. {
  31. private:
  32. Framework::RCArray<NoiseWorm3D> worms;
  33. public:
  34. WormCaveChunkGenerator(Framework::RCArray<NoiseWorm3D> worms);
  35. bool isInCave(int x, int y, int z) override;
  36. };
  37. class WormCaveGenerator : public CaveGenerator
  38. {
  39. private:
  40. int maxDistant;
  41. int minDistant;
  42. int maxRadius;
  43. int minRadius;
  44. float cavePosibillity;
  45. Noise* wormStartNoise;
  46. Framework::RCArray<NoiseWorm3D> cache;
  47. NoiseWorm3D* zWormOfChunk(int x, int y);
  48. public:
  49. WormCaveGenerator(int minDistant,
  50. int maxDistant,
  51. int minRadius,
  52. int maxRadius,
  53. float cavePosibillityPerChunk,
  54. int seed);
  55. ~WormCaveGenerator();
  56. CaveChunkGenerator* getGeneratorForChunk(int x, int y) override;
  57. };