WorldGenerator.h 971 B

12345678910111213141516171819202122232425262728293031323334353637
  1. #pragma once
  2. #include <Critical.h>
  3. #include <Thread.h>
  4. #include "Area.h"
  5. #include "DimensionGenerator.h"
  6. class Chunk;
  7. class WorldGenerator : public Framework::Thread
  8. {
  9. private:
  10. Framework::Critical cs;
  11. Framework::Array<Area> requestQueue;
  12. Framework::RCArray<DimensionGenerator> dimensionGenerators;
  13. bool exit;
  14. int seed;
  15. double chunksPerSecond;
  16. DimensionGenerator* zGenerator(int dimensionId);
  17. public:
  18. WorldGenerator(int seed);
  19. ~WorldGenerator();
  20. Dimension* createDimension(int dimensionId);
  21. void thread() override;
  22. void requestGeneration(Area request);
  23. void exitAndWait();
  24. Framework::Either<Block*, int> generateSingleBlock(
  25. Framework::Vec3<int> location, int dimensionId);
  26. void postprocessChunk(Chunk* zChunk);
  27. bool spawnStructure(Framework::Vec3<int> location,
  28. int dimensionId,
  29. std::function<bool(GeneratorTemplate* tmpl)> filter);
  30. double getGeneratedChunksPerSecond();
  31. };