ItemModifier.cpp 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  1. #include "ItemModifier.h"
  2. #include "Game.h"
  3. #include "ItemType.h"
  4. using namespace Framework;
  5. ItemModifier::ItemModifier()
  6. : ReferenceCounter()
  7. {}
  8. ConsumeItemModifier::ConsumeItemModifier()
  9. : ItemModifier()
  10. {}
  11. void ConsumeItemModifier::applyOn(Item* zItem)
  12. {
  13. zItem->setHp(0);
  14. }
  15. ConsumeItemModifierFactory::ConsumeItemModifierFactory()
  16. : SubTypeFactory()
  17. {}
  18. ConsumeItemModifier* ConsumeItemModifierFactory::fromJson(
  19. Framework::JSON::JSONObject* zJson) const
  20. {
  21. return new ConsumeItemModifier();
  22. }
  23. Framework::JSON::JSONObject* ConsumeItemModifierFactory::toJsonObject(
  24. ConsumeItemModifier* zObject) const
  25. {
  26. return new Framework::JSON::JSONObject();
  27. }
  28. JSONObjectValidationBuilder* ConsumeItemModifierFactory::addToValidator(
  29. JSONObjectValidationBuilder* builder) const
  30. {
  31. return builder;
  32. }
  33. const char* ConsumeItemModifierFactory::getTypeToken() const
  34. {
  35. return "consume";
  36. }
  37. DoNothingModifier::DoNothingModifier()
  38. : ItemModifier()
  39. {}
  40. void DoNothingModifier::applyOn(Item* zItem)
  41. {
  42. // do nothing
  43. }
  44. DoNothingModifierFactory::DoNothingModifierFactory()
  45. : SubTypeFactory()
  46. {}
  47. DoNothingModifier* DoNothingModifierFactory::fromJson(
  48. Framework::JSON::JSONObject* zJson) const
  49. {
  50. return new DoNothingModifier();
  51. }
  52. Framework::JSON::JSONObject* DoNothingModifierFactory::toJsonObject(
  53. DoNothingModifier* zObject) const
  54. {
  55. return new Framework::JSON::JSONObject();
  56. }
  57. JSONObjectValidationBuilder* DoNothingModifierFactory::addToValidator(
  58. JSONObjectValidationBuilder* builder) const
  59. {
  60. return builder;
  61. }
  62. const char* DoNothingModifierFactory::getTypeToken() const
  63. {
  64. return "doNothing";
  65. }
  66. AttributeItemModifier::AttributeItemModifier()
  67. : ItemModifier()
  68. {}
  69. void AttributeItemModifier::applyOn(Item* zItem)
  70. {
  71. auto attribute = attributes.begin();
  72. auto value = values.begin();
  73. while (attribute && value)
  74. {
  75. zItem->zItemType()->setItemAttribute(
  76. zItem, attribute->getText(), value);
  77. attribute++;
  78. value++;
  79. }
  80. }
  81. void AttributeItemModifier::addAttribute(
  82. Framework::Text name, Framework::JSON::JSONValue* value)
  83. {
  84. attributes.add(new Framework::Text(name));
  85. values.add(value);
  86. }
  87. const Framework::RCArray<Framework::Text>&
  88. AttributeItemModifier::getAttributes() const
  89. {
  90. return attributes;
  91. }
  92. const Framework::RCArray<Framework::JSON::JSONValue>&
  93. AttributeItemModifier::getValues() const
  94. {
  95. return values;
  96. }
  97. AttributeItemModifierFactory::AttributeItemModifierFactory()
  98. : SubTypeFactory()
  99. {}
  100. AttributeItemModifier* AttributeItemModifierFactory::fromJson(
  101. Framework::JSON::JSONObject* zJson) const
  102. {
  103. AttributeItemModifier* result = new AttributeItemModifier();
  104. auto attribute = zJson->getFields();
  105. auto value = zJson->getValues();
  106. while (attribute, value)
  107. {
  108. if (!attribute.val().istGleich("type"))
  109. {
  110. result->addAttribute(attribute.val(), value);
  111. }
  112. attribute++;
  113. value++;
  114. }
  115. return result;
  116. }
  117. Framework::JSON::JSONObject* AttributeItemModifierFactory::toJsonObject(
  118. AttributeItemModifier* zObject) const
  119. {
  120. Framework::JSON::JSONObject* result = new Framework::JSON::JSONObject();
  121. auto attribute = zObject->getAttributes().begin();
  122. auto value = zObject->getValues().begin();
  123. while (attribute && value)
  124. {
  125. result->addValue(attribute->getText(),
  126. dynamic_cast<Framework::JSON::JSONObject*>(value->getThis()));
  127. attribute++;
  128. value++;
  129. }
  130. return result;
  131. }
  132. JSONObjectValidationBuilder* AttributeItemModifierFactory::addToValidator(
  133. JSONObjectValidationBuilder* builder) const
  134. {
  135. return builder->allowAdditionalAttriutes();
  136. }
  137. const char* AttributeItemModifierFactory::getTypeToken() const
  138. {
  139. return "attributes";
  140. }
  141. CombinedItemModifier::CombinedItemModifier()
  142. : ItemModifier()
  143. {}
  144. void CombinedItemModifier::applyOn(Item* zItem)
  145. {
  146. for (ItemModifier* modifier : modifiers)
  147. {
  148. modifier->applyOn(zItem);
  149. }
  150. }
  151. void CombinedItemModifier::addModifier(ItemModifier* zModifier)
  152. {
  153. modifiers.add(zModifier);
  154. }
  155. const Framework::RCArray<ItemModifier>&
  156. CombinedItemModifier::getModifiers() const
  157. {
  158. return modifiers;
  159. }
  160. CombinedItemModifierFactory::CombinedItemModifierFactory()
  161. : SubTypeFactory()
  162. {}
  163. CombinedItemModifier* CombinedItemModifierFactory::fromJson(
  164. Framework::JSON::JSONObject* zJson) const
  165. {
  166. CombinedItemModifier* result = new CombinedItemModifier();
  167. for (Framework::JSON::JSONValue* value :
  168. *zJson->zValue("modifiers")->asArray())
  169. {
  170. result->addModifier(
  171. Game::INSTANCE->zTypeRegistry()->fromJson<ItemModifier>(value));
  172. }
  173. return result;
  174. }
  175. Framework::JSON::JSONObject* CombinedItemModifierFactory::toJsonObject(
  176. CombinedItemModifier* zObject) const
  177. {
  178. Framework::JSON::JSONObject* result = new Framework::JSON::JSONObject();
  179. Framework::JSON::JSONArray* modifiers = new Framework::JSON::JSONArray();
  180. for (ItemModifier* modifier : zObject->getModifiers())
  181. {
  182. modifiers->addValue(Game::INSTANCE->zTypeRegistry()->toJson(modifier));
  183. }
  184. result->addValue("modifiers", modifiers);
  185. return result;
  186. }
  187. JSONObjectValidationBuilder* CombinedItemModifierFactory::addToValidator(
  188. JSONObjectValidationBuilder* builder) const
  189. {
  190. return builder->withRequiredArray("modifiers")
  191. ->addAcceptedTypeInArray(
  192. Game::INSTANCE->zTypeRegistry()->getValidator<ItemModifier>())
  193. ->finishArray();
  194. }
  195. const char* CombinedItemModifierFactory::getTypeToken() const
  196. {
  197. return "combined";
  198. }