#pragma once #include #include #include #include "EntityGenerator.h" #include "GeneratorRule.h" #include "JNoise.h" #include "JsonExpression.h" #include "PlantConfig.h" #include "StructureCollection.h" class Block; class Noise; class BiomGenerator : public virtual Framework::ReferenceCounter { private: Framework::Text name; Framework::RCArray templates; Framework::RCArray rules; JBoolExpression* condition; Framework::Vec3 minStructureOffset; Framework::Vec3 maxStructureOffset; Framework::RCArray entityGenerators; Framework::RCArray plantConfigs; public: BiomGenerator(); ~BiomGenerator(); void initialize(JExpressionMemory* zMemory); Framework::Either generateBlock( int x, int y, int z, int dimensionId, Chunk* partialGeneratedChunk); bool isApplicable(); void generateStructures(int x, int y, int z, int dimensionId, Framework::Vec3& minPos, Framework::Vec3& maxPos, Framework::RCArray* zResult); void generatePlants(int x, int y, int z, int dimensionId, Chunk* zChunk, bool underground, bool underwater, int seaFluidBlockTypeId); void generateEntities(int x, int y, int z, int dimensionId); const Framework::RCArray& getTemplates() const; Framework::Vec3 getMinStructureOffset() const; Framework::Vec3 getMaxStructureOffset() const; void setName(Framework::Text name); Framework::Text getName() const; void setCondition(JBoolExpression* condition); JBoolExpression* getCondition() const; void addTemplate(StructureTemplateCollection* collection); const Framework::RCArray& getTemplates(); void addGeneratorRule(GeneratorRule* rule); const Framework::RCArray& getGeneratorRules() const; void addEntityGenerator(EntityGenerator* generator); const Framework::RCArray& getEntityGenerators() const; void addPlantConfig(PlantConfig* config); const Framework::RCArray& getPlantConfigs() const; }; class BiomGeneratorFactory : public ObjectTypeFactory { public: BiomGeneratorFactory(); BiomGenerator* fromJson(Framework::JSON::JSONObject* zJson) const override; Framework::JSON::JSONObject* toJsonObject( BiomGenerator* zObject) const override; JSONObjectValidationBuilder* addToValidator( JSONObjectValidationBuilder* builder) const override; };