BiomGenerator.h 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  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 "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. protected:
  23. int seed;
  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 generateEntities(int x, int y, int z, int dimensionId);
  39. const Framework::RCArray<StructureTemplateCollection>& getTemplates() const;
  40. Framework::Vec3<int> getMinStructureOffset() const;
  41. Framework::Vec3<int> getMaxStructureOffset() const;
  42. void setName(Framework::Text name);
  43. Framework::Text getName() const;
  44. void setCondition(JBoolExpression* condition);
  45. JBoolExpression* getCondition() const;
  46. void addTemplate(StructureTemplateCollection* collection);
  47. const Framework::RCArray<StructureTemplateCollection>& getTemplates();
  48. void addGeneratorRule(GeneratorRule* rule);
  49. const Framework::RCArray<GeneratorRule>& getGeneratorRules() const;
  50. void addEntityGenerator(EntityGenerator* generator);
  51. const Framework::RCArray<EntityGenerator>& getEntityGenerators() const;
  52. };
  53. class BiomGeneratorFactory : public ObjectTypeFactory<BiomGenerator>
  54. {
  55. public:
  56. BiomGeneratorFactory();
  57. BiomGenerator* fromJson(Framework::JSON::JSONObject* zJson) const override;
  58. Framework::JSON::JSONObject* toJsonObject(
  59. BiomGenerator* zObject) const override;
  60. JSONObjectValidationBuilder* addToValidator(
  61. JSONObjectValidationBuilder* builder) const override;
  62. };