BiomGenerator.h 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. #pragma once
  2. #include <Either.h>
  3. #include <JSON.h>
  4. #include <ReferenceCounter.h>
  5. #include "EntityGenerator.h"
  6. #include "GeneratorRule.h"
  7. #include "JsonExpression.h"
  8. #include "PlantConfig.h"
  9. #include "StructureCollection.h"
  10. class Block;
  11. class Noise;
  12. class BiomGenerator : public virtual Framework::ReferenceCounter
  13. {
  14. private:
  15. Framework::Text name;
  16. Framework::RCArray<StructureTemplateCollection> templates;
  17. Framework::RCArray<GeneratorRule> rules;
  18. JBoolExpression* condition;
  19. Framework::Vec3<int> minStructureOffset;
  20. Framework::Vec3<int> maxStructureOffset;
  21. Framework::RCArray<EntityGenerator> entityGenerators;
  22. Framework::RCArray<PlantConfig> plantConfigs;
  23. public:
  24. BiomGenerator();
  25. ~BiomGenerator();
  26. void initialize(JExpressionMemory* zMemory);
  27. Framework::Either<Block*, int> generateBlock(
  28. int x, int y, int z, int dimensionId, Chunk* partialGeneratedChunk);
  29. bool isApplicable();
  30. void generateStructures(int x,
  31. int y,
  32. int z,
  33. int dimensionId,
  34. Framework::Vec3<int>& minPos,
  35. Framework::Vec3<int>& maxPos,
  36. Framework::RCArray<GeneratedStructure>* zResult);
  37. void generatePlants(int x,
  38. int y,
  39. int z,
  40. int dimensionId,
  41. Chunk* zChunk,
  42. bool underground,
  43. bool underwater,
  44. int seaFluidBlockTypeId);
  45. void generateEntities(int x, int y, int z, int dimensionId, Chunk* zChunk);
  46. const Framework::RCArray<StructureTemplateCollection>& getTemplates() const;
  47. Framework::Vec3<int> getMinStructureOffset() const;
  48. Framework::Vec3<int> getMaxStructureOffset() const;
  49. void setName(Framework::Text name);
  50. Framework::Text getName() const;
  51. void setCondition(JBoolExpression* condition);
  52. JBoolExpression* getCondition() const;
  53. void addTemplate(StructureTemplateCollection* collection);
  54. const Framework::RCArray<StructureTemplateCollection>& getTemplates();
  55. void addGeneratorRule(GeneratorRule* rule);
  56. const Framework::RCArray<GeneratorRule>& getGeneratorRules() const;
  57. void addEntityGenerator(EntityGenerator* generator);
  58. const Framework::RCArray<EntityGenerator>& getEntityGenerators() const;
  59. void addPlantConfig(PlantConfig* config);
  60. const Framework::RCArray<PlantConfig>& getPlantConfigs() const;
  61. };
  62. class BiomGeneratorFactory : public ObjectTypeFactory<BiomGenerator>
  63. {
  64. public:
  65. BiomGeneratorFactory();
  66. BiomGenerator* fromJson(Framework::JSON::JSONObject* zJson) const override;
  67. Framework::JSON::JSONObject* toJsonObject(
  68. BiomGenerator* zObject) const override;
  69. JSONObjectValidationBuilder* addToValidator(
  70. JSONObjectValidationBuilder* builder) const override;
  71. };