BlockTypeGeneratorRule.cpp 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. #include "BlockTypeGeneratorRule.h"
  2. #include "Game.h"
  3. BlockTypeGeneratorRule::BlockTypeGeneratorRule(
  4. Framework::JSON::JSONValue* zConfig, JExpressionMemory* zMemory)
  5. : GeneratorRule(zConfig, zMemory)
  6. {
  7. blockType = BlockType::getTypeId(
  8. zConfig->asObject()->zValue("blockType")->asString()->getString());
  9. }
  10. Framework::Either<Block*, int> BlockTypeGeneratorRule::createBlock(
  11. int x, int y, int z, int dimensionId)
  12. {
  13. return blockType;
  14. }
  15. BlockTypeGeneratorRuleFactory::BlockTypeGeneratorRuleFactory()
  16. : ReferenceCounter()
  17. {}
  18. GeneratorRule* BlockTypeGeneratorRuleFactory::createRule(
  19. Framework::JSON::JSONValue* zConfig, JExpressionMemory* zMemory)
  20. {
  21. return new BlockTypeGeneratorRule(zConfig, zMemory);
  22. }
  23. Framework::JSON::Validator::JSONValidator*
  24. BlockTypeGeneratorRuleFactory::getValidator()
  25. {
  26. Framework::RCArray<Framework::Text> blockTypeNames;
  27. for (int i = 0; i < Game::INSTANCE->getBlockTypeCount(); i++)
  28. {
  29. if (Game::INSTANCE->zBlockType(i))
  30. {
  31. blockTypeNames.add(
  32. new Framework::Text(Game::INSTANCE->zBlockType(i)->getName()));
  33. }
  34. }
  35. return GeneratorRule::addToValidator(
  36. Framework::JSON::Validator::JSONValidator::buildForObject()
  37. ->withRequiredString("type")
  38. ->withExactMatch("blockType")
  39. ->finishString()
  40. ->withRequiredString("blockType")
  41. ->whichIsOneOf(blockTypeNames)
  42. ->finishString())
  43. ->finishObject();
  44. }