Quest.h 5.1 KB

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