TypeRegistry.cpp 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. #include "TypeRegistry.h"
  2. #include "BlockTypeGeneratorRule.h"
  3. #include "BlockInstanceGeneratorRule.h"
  4. #include "OverworldDimensionGenerator.h"
  5. #include "TreeTemplate.h"
  6. #include "OverworldDimension.h"
  7. TypeRegistry::TypeRegistry()
  8. : ReferenceCounter()
  9. {
  10. // register dimension generators
  11. registerDimensionGeneratorFactory(new OverworldDimensionGeneratorFactory());
  12. // register dimensions
  13. registerDimension(new OverworldDimensionFactory());
  14. // register rules
  15. registerGeneratorRuleFactory(new BlockTypeGeneratorRuleFactory());
  16. registerGeneratorRuleFactory(new BlockInstanceGeneratorRuleFactory());
  17. // register templates
  18. registerGeneratorTemplate(new TreeTemplateFactory());
  19. }
  20. void TypeRegistry::registerGeneratorRuleFactory(GeneratorRuleFactory* factory)
  21. {
  22. generatorRules.add(factory);
  23. }
  24. GeneratorRule* TypeRegistry::createGeneratorRule(
  25. Framework::JSON::JSONValue* zConfig, JExpressionMemory* zMemory)
  26. {
  27. for (GeneratorRuleFactory* f : generatorRules)
  28. {
  29. Framework::JSON::Validator::JSONValidator* validator
  30. = f->getValidator();
  31. if (validator->isValid(zConfig))
  32. {
  33. validator->release();
  34. return f->createRule(zConfig, zMemory);
  35. }
  36. validator->release();
  37. }
  38. return 0;
  39. }
  40. Framework::JSON::Validator::JSONValidator*
  41. TypeRegistry::getGeneratorRuleValidator()
  42. {
  43. auto validator = Framework::JSON::Validator::JSONValidator::buildForOneOf()
  44. ->typeSpecifiedByAttribute("type");
  45. for (GeneratorRuleFactory* f : generatorRules)
  46. {
  47. validator->addAcceptedType(f->getValidator());
  48. }
  49. return validator->finishOneOf();
  50. }
  51. void TypeRegistry::registerDimensionGeneratorFactory(
  52. DimensionGeneratorFactory* factory)
  53. {
  54. dimensionGenerators.add(factory);
  55. }
  56. DimensionGenerator* TypeRegistry::createDimensionGenerator(
  57. Framework::JSON::JSONValue* zConfig, int worldSeed)
  58. {
  59. for (DimensionGeneratorFactory* f : dimensionGenerators)
  60. {
  61. Framework::JSON::Validator::JSONValidator* validator
  62. = f->getConfigValidator();
  63. if (validator->isValid(zConfig))
  64. {
  65. validator->release();
  66. std::cout << "Loaded Config for dimension '" << f->getName()
  67. << "' with id " << f->getDimensionId() << "\n";
  68. return f->createDimensionGenerator(worldSeed, zConfig);
  69. }
  70. validator->release();
  71. }
  72. return 0;
  73. }
  74. Framework::JSON::Validator::JSONValidator*
  75. TypeRegistry::getDimensionGeneratorValidator()
  76. {
  77. auto validator = Framework::JSON::Validator::JSONValidator::buildForOneOf()
  78. ->typeSpecifiedByAttribute("dimension");
  79. for (DimensionGeneratorFactory* f : dimensionGenerators)
  80. {
  81. validator->addAcceptedType(f->getConfigValidator());
  82. }
  83. return validator->finishOneOf();
  84. }
  85. const Framework::RCArray<DimensionGeneratorFactory>&
  86. TypeRegistry::getDimensionGeneratorFactories() const
  87. {
  88. return dimensionGenerators;
  89. }
  90. void TypeRegistry::registerDimension(DimensionFactory* factory)
  91. {
  92. dimensionFactories.add(factory);
  93. }
  94. Dimension* TypeRegistry::createDimension(int id)
  95. {
  96. for (DimensionFactory* factory : dimensionFactories)
  97. {
  98. if (factory->getDimensionId() == id)
  99. {
  100. return factory->createDimension();
  101. }
  102. }
  103. return 0;
  104. }
  105. void TypeRegistry::registerGeneratorTemplate(GeneratorTemplateFactory* factory)
  106. {
  107. generatorTemplates.add(factory);
  108. }
  109. GeneratorTemplate* TypeRegistry::createGeneratorTemplate(
  110. Framework::JSON::JSONValue* zConfig)
  111. {
  112. for (GeneratorTemplateFactory* f : generatorTemplates)
  113. {
  114. Framework::JSON::Validator::JSONValidator* validator
  115. = f->getValidator();
  116. if (validator->isValid(zConfig))
  117. {
  118. validator->release();
  119. return f->createTemplate(zConfig);
  120. }
  121. validator->release();
  122. }
  123. return 0;
  124. }
  125. Framework::JSON::Validator::JSONValidator*
  126. TypeRegistry::getGeneratorTemplateValidator()
  127. {
  128. auto validator = Framework::JSON::Validator::JSONValidator::buildForOneOf()
  129. ->typeSpecifiedByAttribute("type");
  130. for (GeneratorTemplateFactory* f : generatorTemplates)
  131. {
  132. validator->addAcceptedType(f->getValidator());
  133. }
  134. return validator->finishOneOf();
  135. }