#pragma once #include #include #include #include "CaveGenerator.h" #include "Noise.h" class NoiseWorm3D : public Framework::ReferenceCounter { private: Framework::Punkt startChunk; Framework::Punkt minAffected; Framework::Punkt maxAffected; Framework::Array> keyPoints; Framework::Array size; NoiseWorm3D(); public: NoiseWorm3D(Noise* pitch, Noise* yaw, Noise* size, Framework::Vec3 startPos, int distant, int minRad, int maxRad); Framework::Punkt getStartChunkCenter(); NoiseWorm3D* getPartAffectedByChunk(int x, int y); bool isInside(int x, int y, int z); }; class WormCaveChunkGenerator : public CaveChunkGenerator { private: Framework::RCArray worms; public: WormCaveChunkGenerator(Framework::RCArray worms); bool isInCave(int x, int y, int z) override; }; class WormCaveGenerator : public CaveGenerator { private: int maxDistant; int minDistant; int maxRadius; int minRadius; float cavePosibillity; Noise* wormStartNoise; Framework::RCArray cache; Framework::Array noWormChunks; NoiseWorm3D* zWormOfChunk(int x, int y); public: WormCaveGenerator(int minDistant, int maxDistant, int minRadius, int maxRadius, float cavePosibillityPerChunk); ~WormCaveGenerator(); void initialize(int seed) override; CaveChunkGenerator* getGeneratorForChunk(int x, int y) override; };