#pragma once #include #include #include "Area.h" #include "DimensionGenerator.h" class WorldGenerator : public Framework::Thread { private: Framework::Critical cs; Framework::Array requestQueue; Framework::RCArray dimensionGenerators; bool exit; int seed; Framework::JSON::Validator::JSONValidator *buildConfigValidator(); void loadConfig( const char* path, Framework::JSON::Validator::JSONValidator *zValidator); void loadDimensionConfig(Framework::JSON::JSONValue* zConfig); void addMissingDimensions(); DimensionGenerator* zGenerator(int dimensionId); public: WorldGenerator(int seed); ~WorldGenerator(); void thread() override; void requestGeneration(Area request); void exitAndWait(); Framework::Either generateSingleBlock( Framework::Vec3 location, int dimensionId); bool spawnStructure(Framework::Vec3 location, int dimensionId, std::function filter); };