QuestRequirement.h 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  1. #pragma once
  2. #include "QuestEvent.h"
  3. #include "TypeRegistry.h"
  4. class QuestStorage;
  5. class QuestRequirement : public virtual Framework::ReferenceCounter
  6. {
  7. protected:
  8. Framework::Text id;
  9. Framework::Text description;
  10. public:
  11. QuestRequirement();
  12. virtual void processEvent(QuestEvent* zEvent, QuestStorage* zStorage) = 0;
  13. virtual void addRequirementUIML(QuestStorage* zStorage,
  14. Framework::XML::Element* zParent,
  15. Framework::Text onClickPrefix)
  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(QuestStorage* zStorage,
  74. Framework::XML::Element* zParent,
  75. Framework::Text onClickPrefix) override;
  76. void setDialogId(Framework::Text dialogId);
  77. const Framework::Text& getDialogId() const;
  78. friend QuestRequirementOpenDialogType;
  79. };
  80. class QuestRequirementOpenDialogType
  81. : public QuestRequirementFactoryBase<QuestRequirementOpenDialog>
  82. {
  83. public:
  84. QuestRequirementOpenDialogType();
  85. QuestRequirementOpenDialog* createValue(
  86. Framework::JSON::JSONObject* zJson) const override;
  87. QuestRequirementOpenDialog* fromJson(
  88. Framework::JSON::JSONObject* zJson) const override;
  89. Framework::JSON::JSONObject* toJsonObject(
  90. QuestRequirementOpenDialog* zObject) const override;
  91. JSONObjectValidationBuilder* addToValidator(
  92. JSONObjectValidationBuilder* builder) const override;
  93. const char* getTypeToken() const override;
  94. };
  95. class QuestRequirementBlockBreak : public QuestRequirement
  96. {
  97. private:
  98. int blockTypeId;
  99. int amount;
  100. int usedItemTypeId;
  101. public:
  102. QuestRequirementBlockBreak();
  103. void processEvent(QuestEvent* zEvent, QuestStorage* zStorage) override;
  104. void addRequirementUIML(QuestStorage* zStorage,
  105. Framework::XML::Element* zParent,
  106. Framework::Text onClickPrefix) override;
  107. void setBlockTypeId(int blockTypeId);
  108. int getBlockTypeId() const;
  109. void setAmount(int amount);
  110. int getAmount() const;
  111. void setUsedItemTypeId(int usedItemTypeId);
  112. int getUsedItemTypeId() const;
  113. };
  114. class QuestRequirementBlockBreakType
  115. : public QuestRequirementFactoryBase<QuestRequirementBlockBreak>
  116. {
  117. public:
  118. QuestRequirementBlockBreakType();
  119. QuestRequirementBlockBreak* createValue(
  120. Framework::JSON::JSONObject* zJson) const override;
  121. QuestRequirementBlockBreak* fromJson(
  122. Framework::JSON::JSONObject* zJson) const override;
  123. Framework::JSON::JSONObject* toJsonObject(
  124. QuestRequirementBlockBreak* zObject) const override;
  125. JSONObjectValidationBuilder* addToValidator(
  126. JSONObjectValidationBuilder* builder) const override;
  127. const char* getTypeToken() const override;
  128. };
  129. class QuestRequirementBlockPlace : public QuestRequirement
  130. {
  131. private:
  132. int blockTypeId;
  133. int amount;
  134. public:
  135. QuestRequirementBlockPlace();
  136. void processEvent(QuestEvent* zEvent, QuestStorage* zStorage) override;
  137. void addRequirementUIML(QuestStorage* zStorage,
  138. Framework::XML::Element* zParent,
  139. Framework::Text onClickPrefix) override;
  140. void setBlockTypeId(int blockTypeId);
  141. int getBlockTypeId() const;
  142. void setAmount(int amount);
  143. int getAmount() const;
  144. };
  145. class QuestRequirementBlockPlaceType
  146. : public QuestRequirementFactoryBase<QuestRequirementBlockPlace>
  147. {
  148. public:
  149. QuestRequirementBlockPlaceType();
  150. QuestRequirementBlockPlace* createValue(
  151. Framework::JSON::JSONObject* zJson) const override;
  152. QuestRequirementBlockPlace* fromJson(
  153. Framework::JSON::JSONObject* zJson) const override;
  154. Framework::JSON::JSONObject* toJsonObject(
  155. QuestRequirementBlockPlace* zObject) const override;
  156. JSONObjectValidationBuilder* addToValidator(
  157. JSONObjectValidationBuilder* builder) const override;
  158. const char* getTypeToken() const override;
  159. };
  160. class QuestRequirementBlockInteract : public QuestRequirement
  161. {
  162. int blockTypeId;
  163. int itemTypeId;
  164. public:
  165. QuestRequirementBlockInteract();
  166. void processEvent(QuestEvent* zEvent, QuestStorage* zStorage) override;
  167. void addRequirementUIML(QuestStorage* zStorage,
  168. Framework::XML::Element* zParent,
  169. Framework::Text onClickPrefix) override;
  170. void setBlockTypeId(int blockTypeId);
  171. int getBlockTypeId() const;
  172. void setItemTypeId(int itemTypeId);
  173. int getItemTypeId() const;
  174. };
  175. class QuestRequirementBlockInteractType
  176. : public QuestRequirementFactoryBase<QuestRequirementBlockInteract>
  177. {
  178. public:
  179. QuestRequirementBlockInteractType();
  180. QuestRequirementBlockInteract* createValue(
  181. Framework::JSON::JSONObject* zJson) const override;
  182. QuestRequirementBlockInteract* fromJson(
  183. Framework::JSON::JSONObject* zJson) const override;
  184. Framework::JSON::JSONObject* toJsonObject(
  185. QuestRequirementBlockInteract* zObject) const override;
  186. JSONObjectValidationBuilder* addToValidator(
  187. JSONObjectValidationBuilder* builder) const override;
  188. const char* getTypeToken() const override;
  189. };
  190. class QuestRequirementItemInInventory : public QuestRequirement
  191. {
  192. private:
  193. int itemTypeId;
  194. int amount;
  195. public:
  196. QuestRequirementItemInInventory();
  197. void processEvent(QuestEvent* zEvent, QuestStorage* zStorage) override;
  198. void addRequirementUIML(QuestStorage* zStorage,
  199. Framework::XML::Element* zParent,
  200. Framework::Text onClickPrefix) override;
  201. void setItemTypeId(int itemTypeId);
  202. int getItemTypeId() const;
  203. void setAmount(int amount);
  204. int getAmount() const;
  205. };
  206. class QuestRequirementItemInInventoryType
  207. : public QuestRequirementFactoryBase<QuestRequirementItemInInventory>
  208. {
  209. public:
  210. QuestRequirementItemInInventoryType();
  211. QuestRequirementItemInInventory* createValue(
  212. Framework::JSON::JSONObject* zJson) const override;
  213. QuestRequirementItemInInventory* fromJson(
  214. Framework::JSON::JSONObject* zJson) const override;
  215. Framework::JSON::JSONObject* toJsonObject(
  216. QuestRequirementItemInInventory* zObject) const override;
  217. JSONObjectValidationBuilder* addToValidator(
  218. JSONObjectValidationBuilder* builder) const override;
  219. const char* getTypeToken() const override;
  220. };