QuestRequirement.h 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  1. #pragma once
  2. #include "QuestEvent.h"
  3. #include "TypeRegistry.h"
  4. class QuestStorage;
  5. class UIMLContainerBuilder;
  6. class QuestRequirement : public virtual Framework::ReferenceCounter
  7. {
  8. protected:
  9. Framework::Text id;
  10. Framework::Text description;
  11. public:
  12. QuestRequirement();
  13. virtual void processEvent(QuestEvent* zEvent, QuestStorage* zStorage) = 0;
  14. virtual void addRequirementUIML(
  15. QuestStorage* zStorage, UIMLContainerBuilder* zParent)
  16. = 0;
  17. virtual void api(Framework::StreamReader* message,
  18. Framework::XML::Element* zParent,
  19. QuestStorage* zStorage);
  20. void setRequirementId(Framework::Text id);
  21. const Framework::Text& getRequirementId() const;
  22. void setDescription(Framework::Text description);
  23. const Framework::Text& getDescription() const;
  24. };
  25. template<typename S> class QuestRequirementFactoryBase
  26. : public SubTypeFactory<QuestRequirement, S>
  27. {
  28. public:
  29. QuestRequirementFactoryBase()
  30. : SubTypeFactory<QuestRequirement, S>()
  31. {}
  32. S* fromJson(Framework::JSON::JSONObject* zJson) const override
  33. {
  34. S* result = createValue(zJson);
  35. QuestRequirement* zRequirement
  36. = dynamic_cast<QuestRequirement*>(result);
  37. zRequirement->setRequirementId(
  38. zJson->zValue("id")->asString()->getString());
  39. zRequirement->setDescription(
  40. zJson->zValue("description")->asString()->getString());
  41. return result;
  42. }
  43. Framework::JSON::JSONObject* toJsonObject(S* zObject) const override
  44. {
  45. Framework::JSON::JSONObject* result = new Framework::JSON::JSONObject();
  46. QuestRequirement* zRequirement
  47. = dynamic_cast<QuestRequirement*>(zObject);
  48. result->addValue("id",
  49. new Framework::JSON::JSONString(zRequirement->getRequirementId()));
  50. result->addValue("description",
  51. new Framework::JSON::JSONString(zRequirement->getDescription()));
  52. return result;
  53. }
  54. JSONObjectValidationBuilder* addToValidator(
  55. JSONObjectValidationBuilder* builder) const override
  56. {
  57. return builder->withRequiredString("id")
  58. ->finishString()
  59. ->withRequiredString("description")
  60. ->finishString();
  61. }
  62. protected:
  63. virtual S* createValue(Framework::JSON::JSONObject* zJson) const = 0;
  64. };
  65. class QuestRequirementOpenDialogType;
  66. class QuestRequirementOpenDialog : public QuestRequirement
  67. {
  68. private:
  69. Framework::Text dialogId;
  70. public:
  71. QuestRequirementOpenDialog();
  72. void processEvent(QuestEvent* zEvent, QuestStorage* zStorage) override;
  73. void addRequirementUIML(
  74. QuestStorage* zStorage, UIMLContainerBuilder* zParent) override;
  75. void setDialogId(Framework::Text dialogId);
  76. const Framework::Text& getDialogId() const;
  77. friend QuestRequirementOpenDialogType;
  78. };
  79. class QuestRequirementOpenDialogType
  80. : public QuestRequirementFactoryBase<QuestRequirementOpenDialog>
  81. {
  82. public:
  83. QuestRequirementOpenDialogType();
  84. QuestRequirementOpenDialog* createValue(
  85. Framework::JSON::JSONObject* zJson) const override;
  86. QuestRequirementOpenDialog* fromJson(
  87. Framework::JSON::JSONObject* zJson) const override;
  88. Framework::JSON::JSONObject* toJsonObject(
  89. QuestRequirementOpenDialog* zObject) const override;
  90. JSONObjectValidationBuilder* addToValidator(
  91. JSONObjectValidationBuilder* builder) const override;
  92. const char* getTypeToken() const override;
  93. };
  94. class QuestRequirementBlockBreak : public QuestRequirement
  95. {
  96. private:
  97. int blockTypeId;
  98. int amount;
  99. int usedItemTypeId;
  100. public:
  101. QuestRequirementBlockBreak();
  102. void processEvent(QuestEvent* zEvent, QuestStorage* zStorage) override;
  103. void addRequirementUIML(
  104. QuestStorage* zStorage, UIMLContainerBuilder* zParent) override;
  105. void setBlockTypeId(int blockTypeId);
  106. int getBlockTypeId() const;
  107. void setAmount(int amount);
  108. int getAmount() const;
  109. void setUsedItemTypeId(int usedItemTypeId);
  110. int getUsedItemTypeId() const;
  111. };
  112. class QuestRequirementBlockBreakType
  113. : public QuestRequirementFactoryBase<QuestRequirementBlockBreak>
  114. {
  115. public:
  116. QuestRequirementBlockBreakType();
  117. QuestRequirementBlockBreak* createValue(
  118. Framework::JSON::JSONObject* zJson) const override;
  119. QuestRequirementBlockBreak* fromJson(
  120. Framework::JSON::JSONObject* zJson) const override;
  121. Framework::JSON::JSONObject* toJsonObject(
  122. QuestRequirementBlockBreak* zObject) const override;
  123. JSONObjectValidationBuilder* addToValidator(
  124. JSONObjectValidationBuilder* builder) const override;
  125. const char* getTypeToken() const override;
  126. };
  127. class QuestRequirementBlockPlace : public QuestRequirement
  128. {
  129. private:
  130. int blockTypeId;
  131. int amount;
  132. public:
  133. QuestRequirementBlockPlace();
  134. void processEvent(QuestEvent* zEvent, QuestStorage* zStorage) override;
  135. void addRequirementUIML(
  136. QuestStorage* zStorage, UIMLContainerBuilder* zParent) override;
  137. void setBlockTypeId(int blockTypeId);
  138. int getBlockTypeId() const;
  139. void setAmount(int amount);
  140. int getAmount() const;
  141. };
  142. class QuestRequirementBlockPlaceType
  143. : public QuestRequirementFactoryBase<QuestRequirementBlockPlace>
  144. {
  145. public:
  146. QuestRequirementBlockPlaceType();
  147. QuestRequirementBlockPlace* createValue(
  148. Framework::JSON::JSONObject* zJson) const override;
  149. QuestRequirementBlockPlace* fromJson(
  150. Framework::JSON::JSONObject* zJson) const override;
  151. Framework::JSON::JSONObject* toJsonObject(
  152. QuestRequirementBlockPlace* zObject) const override;
  153. JSONObjectValidationBuilder* addToValidator(
  154. JSONObjectValidationBuilder* builder) const override;
  155. const char* getTypeToken() const override;
  156. };
  157. class QuestRequirementBlockInteract : public QuestRequirement
  158. {
  159. int blockTypeId;
  160. int itemTypeId;
  161. public:
  162. QuestRequirementBlockInteract();
  163. void processEvent(QuestEvent* zEvent, QuestStorage* zStorage) override;
  164. void addRequirementUIML(
  165. QuestStorage* zStorage, UIMLContainerBuilder* zParent) override;
  166. void setBlockTypeId(int blockTypeId);
  167. int getBlockTypeId() const;
  168. void setItemTypeId(int itemTypeId);
  169. int getItemTypeId() const;
  170. };
  171. class QuestRequirementBlockInteractType
  172. : public QuestRequirementFactoryBase<QuestRequirementBlockInteract>
  173. {
  174. public:
  175. QuestRequirementBlockInteractType();
  176. QuestRequirementBlockInteract* createValue(
  177. Framework::JSON::JSONObject* zJson) const override;
  178. QuestRequirementBlockInteract* fromJson(
  179. Framework::JSON::JSONObject* zJson) const override;
  180. Framework::JSON::JSONObject* toJsonObject(
  181. QuestRequirementBlockInteract* zObject) const override;
  182. JSONObjectValidationBuilder* addToValidator(
  183. JSONObjectValidationBuilder* builder) const override;
  184. const char* getTypeToken() const override;
  185. };
  186. class QuestRequirementItemInInventory : public QuestRequirement
  187. {
  188. private:
  189. int itemTypeId;
  190. int amount;
  191. public:
  192. QuestRequirementItemInInventory();
  193. void processEvent(QuestEvent* zEvent, QuestStorage* zStorage) override;
  194. void addRequirementUIML(
  195. QuestStorage* zStorage, UIMLContainerBuilder* zParent) override;
  196. void setItemTypeId(int itemTypeId);
  197. int getItemTypeId() const;
  198. void setAmount(int amount);
  199. int getAmount() const;
  200. };
  201. class QuestRequirementItemInInventoryType
  202. : public QuestRequirementFactoryBase<QuestRequirementItemInInventory>
  203. {
  204. public:
  205. QuestRequirementItemInInventoryType();
  206. QuestRequirementItemInInventory* createValue(
  207. Framework::JSON::JSONObject* zJson) const override;
  208. QuestRequirementItemInInventory* fromJson(
  209. Framework::JSON::JSONObject* zJson) const override;
  210. Framework::JSON::JSONObject* toJsonObject(
  211. QuestRequirementItemInInventory* zObject) const override;
  212. JSONObjectValidationBuilder* addToValidator(
  213. JSONObjectValidationBuilder* builder) const override;
  214. const char* getTypeToken() const override;
  215. };