BiomGenerator.h 2.7 KB

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