#pragma once #include #include #include #include "CaveGenerator.h" #include "Noise.h" class NoiseWorm3D : public Framework::ReferenceCounter { private: Framework::Punkt startChunk; Framework::Vec3 minAffected; Framework::Vec3 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(); void getPartAffectedByChunk( int x, int y, Framework::RCArray* zResult); 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, int seed); ~WormCaveGenerator(); CaveChunkGenerator* getGeneratorForChunk(int x, int y) override; };