Quest.h 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. #pragma once
  2. #include <JSON.h>
  3. #include "QuestEvent.h"
  4. #include "QuestRequirement.h"
  5. #include "QuestReward.h"
  6. #include "TypeRegistry.h"
  7. class QuestRequirementStorageType;
  8. class QuestRequirementStorage : public virtual Framework::ReferenceCounter
  9. {
  10. private:
  11. Framework::Text requirementId;
  12. bool fulfilled;
  13. Framework::JSON::JSONObject* data;
  14. public:
  15. QuestRequirementStorage(Framework::Text requirementId);
  16. ~QuestRequirementStorage();
  17. void putValue(Framework::Text key, Framework::JSON::JSONValue* value);
  18. Framework::JSON::JSONValue* getValue(Framework::Text key) const;
  19. Framework::JSON::JSONValue* zValue(Framework::Text key) const;
  20. bool containsKey(Framework::Text key) const;
  21. void setFullfilled(bool fullfilled);
  22. bool isFullfilled() const;
  23. const Framework::Text& getRequirementId() const;
  24. friend QuestRequirementStorageType;
  25. };
  26. class QuestRequirementStorageType : public TypeFactory<QuestRequirementStorage>
  27. {
  28. public:
  29. QuestRequirementStorageType();
  30. QuestRequirementStorage* fromJson(
  31. Framework::JSON::JSONValue* zJson) const override;
  32. Framework::JSON::JSONValue* toJson(
  33. QuestRequirementStorage* zObject) const override;
  34. Framework::JSON::Validator::JSONValidator* getValidator() const override;
  35. };
  36. class QuestStorageType;
  37. class QuestStorage : public virtual Framework::ReferenceCounter
  38. {
  39. private:
  40. Framework::Text questId;
  41. bool finished;
  42. bool rewarded;
  43. Framework::RCArray<QuestRequirementStorage> requirements;
  44. public:
  45. QuestStorage(Framework::Text questId);
  46. void setQuestFinished(bool finished);
  47. void setQuestRewarded(bool rewarded);
  48. bool isQuestFinished() const;
  49. bool isQuestRewarded() const;
  50. QuestRequirementStorage* zStorage(Framework::Text requirementId);
  51. const Framework::Text& getQuestId() const;
  52. friend QuestStorageType;
  53. };
  54. class QuestStorageType : public TypeFactory<QuestStorage>
  55. {
  56. public:
  57. QuestStorageType();
  58. QuestStorage* fromJson(Framework::JSON::JSONValue* zJson) const override;
  59. Framework::JSON::JSONValue* toJson(QuestStorage* zObject) const override;
  60. Framework::JSON::Validator::JSONValidator* getValidator() const override;
  61. };
  62. class QuestPartyType;
  63. class QuestParty : public virtual Framework::ReferenceCounter
  64. {
  65. private:
  66. Framework::Array<int> memberEntityIds;
  67. Framework::RCArray<QuestStorage> questStorage;
  68. public:
  69. QuestParty();
  70. void addMember(int memberEntityId);
  71. void removeMember(int memberEntityId);
  72. bool isMember(int memberEntityId) const;
  73. bool isEmpty() const;
  74. QuestStorage* zQuestStorage(Framework::Text questId);
  75. QuestParty* clone() const;
  76. friend QuestPartyType;
  77. };
  78. class QuestPartyType : public TypeFactory<QuestParty>
  79. {
  80. public:
  81. QuestPartyType();
  82. QuestParty* fromJson(Framework::JSON::JSONValue* zJson) const override;
  83. Framework::JSON::JSONValue* toJson(QuestParty* zObject) const override;
  84. Framework::JSON::Validator::JSONValidator* getValidator() const override;
  85. };
  86. class QuestType;
  87. class Quest : public virtual Framework::ReferenceCounter
  88. {
  89. private:
  90. Framework::Text questId;
  91. Framework::Text questName;
  92. Framework::Text description;
  93. Framework::Text imagePath;
  94. bool mainQuest;
  95. Framework::RCArray<Framework::Text> requiredQuestsIds;
  96. Framework::RCArray<QuestRequirement> requirements;
  97. Framework::RCArray<QuestReward> rewards;
  98. public:
  99. Quest(Framework::Text questId);
  100. void processEvent(QuestEvent* zEvent, QuestStorage* zStorage);
  101. bool isVisible(QuestParty* zParty);
  102. void giveReward(int choice, Entity* zTargetEntity, QuestStorage* zStorage);
  103. const Framework::Text& getQuestId() const;
  104. Framework::Text getQuestGraphItemUIML(QuestStorage* zStorage);
  105. Framework::Text getQuestViewUIML(QuestStorage* zStorage);
  106. friend QuestType;
  107. };
  108. class QuestType : public TypeFactory<Quest>
  109. {
  110. public:
  111. QuestType();
  112. Quest* fromJson(Framework::JSON::JSONValue* zJson) const override;
  113. Framework::JSON::JSONValue* toJson(Quest* zObject) const override;
  114. Framework::JSON::Validator::JSONValidator* getValidator() const override;
  115. };
  116. class QuestCollectionType;
  117. class QuestCollection : public virtual Framework::ReferenceCounter
  118. {
  119. private:
  120. Framework::Text name;
  121. Framework::RCArray<Quest> quests;
  122. public:
  123. QuestCollection(Framework::Text name);
  124. void processEvent(QuestEvent* zEvent, QuestParty* zParty);
  125. bool isVisible(QuestParty* zParty);
  126. void giveReward(Framework::Text questId,
  127. int choice,
  128. Entity* zTargetEntity,
  129. QuestParty* zParty);
  130. void addQuest(Quest* zQuest);
  131. const Framework::Text& getName() const;
  132. Framework::Text getQuestGraphUIML(QuestParty* zParty);
  133. Framework::Text getQuestViewUIML(
  134. QuestParty* zParty, Framework::Text questId);
  135. friend QuestCollectionType;
  136. };
  137. class QuestCollectionType : public TypeFactory<QuestCollection>
  138. {
  139. public:
  140. QuestCollectionType();
  141. QuestCollection* fromJson(Framework::JSON::JSONValue* zJson) const override;
  142. Framework::JSON::JSONValue* toJson(QuestCollection* zObject) const override;
  143. Framework::JSON::Validator::JSONValidator* getValidator() const override;
  144. };
  145. class QuestManager : public virtual Framework::ReferenceCounter
  146. {
  147. private:
  148. Framework::RCArray<QuestCollection> questCollections;
  149. Framework::RCArray<QuestParty> parties;
  150. QuestParty* zParty(int entityId);
  151. public:
  152. QuestManager();
  153. void loadQuests();
  154. void saveQuests();
  155. void processEvent(QuestEvent* event);
  156. void giveReward(Framework::Text questId, int choice, Entity* zTargetEntity);
  157. Framework::Text getDialogUIML(Entity* zTargetEntity);
  158. Framework::Text getQuestGraphUIML(
  159. Entity* zTargetEntity, Framework::Text collectionName);
  160. Framework::Text getQuestViewUIML(
  161. Entity* zTargetEntity, Framework::Text questId);
  162. };