#pragma once #include #include "QuestEvent.h" #include "QuestRequirement.h" #include "QuestReward.h" #include "TypeRegistry.h" class QuestRequirementStorageType; class QuestRequirementStorage : public virtual Framework::ReferenceCounter { private: Framework::Text requirementId; bool fulfilled; Framework::JSON::JSONObject* data; public: QuestRequirementStorage(Framework::Text requirementId); ~QuestRequirementStorage(); void putValue(Framework::Text key, Framework::JSON::JSONValue* value); Framework::JSON::JSONValue* getValue(Framework::Text key) const; Framework::JSON::JSONValue* zValue(Framework::Text key) const; bool containsKey(Framework::Text key) const; void setFullfilled(bool fullfilled); bool isFullfilled() const; const Framework::Text& getRequirementId() const; friend QuestRequirementStorageType; }; class QuestRequirementStorageType : public TypeFactory { public: QuestRequirementStorageType(); QuestRequirementStorage* fromJson( Framework::JSON::JSONValue* zJson) const override; Framework::JSON::JSONValue* toJson( QuestRequirementStorage* zObject) const override; Framework::JSON::Validator::JSONValidator* getValidator() const override; }; class QuestStorageType; class QuestStorage : public virtual Framework::ReferenceCounter { private: Framework::Text questId; bool finished; bool rewarded; Framework::RCArray requirements; public: QuestStorage(Framework::Text questId); void setQuestFinished(bool finished); void setQuestRewarded(bool rewarded); bool isQuestFinished() const; bool isQuestRewarded() const; QuestRequirementStorage* zStorage(Framework::Text requirementId); const Framework::Text& getQuestId() const; friend QuestStorageType; }; class QuestStorageType : public TypeFactory { public: QuestStorageType(); QuestStorage* fromJson( Framework::JSON::JSONValue* zJson) const override; Framework::JSON::JSONValue* toJson( QuestStorage* zObject) const override; Framework::JSON::Validator::JSONValidator* getValidator() const override; }; class QuestPartyType; class QuestParty : public virtual Framework::ReferenceCounter { private: Framework::Array memberEntityIds; Framework::RCArray questStorage; public: QuestParty(); void addMember(int memberEntityId); void removeMember(int memberEntityId); bool isMember(int memberEntityId) const; bool isEmpty() const; QuestStorage* zQuestStorage(Framework::Text questId); QuestParty* clone() const; friend QuestPartyType; }; class QuestPartyType : public TypeFactory { public: QuestPartyType(); QuestParty* fromJson(Framework::JSON::JSONValue* zJson) const override; Framework::JSON::JSONValue* toJson(QuestParty* zObject) const override; Framework::JSON::Validator::JSONValidator* getValidator() const override; }; class QuestType; class Quest : public virtual Framework::ReferenceCounter { private: Framework::Text questId; Framework::Text questName; Framework::Text description; Framework::RCArray requiredQuestsIds; Framework::RCArray requirements; Framework::RCArray rewards; public: Quest(Framework::Text questId); void processEvent(QuestEvent* zEvent, QuestStorage* zStorage); bool isVisible(QuestParty* zParty); void giveReward(int choice, Entity* zTargetEntity, QuestStorage* zStorage); const Framework::Text& getQuestId() const; friend QuestType; }; class QuestType : public TypeFactory { public: QuestType(); Quest* fromJson(Framework::JSON::JSONValue* zJson) const override; Framework::JSON::JSONValue* toJson(Quest* zObject) const override; Framework::JSON::Validator::JSONValidator* getValidator() const override; }; class QuestCollectionType; class QuestCollection : public virtual Framework::ReferenceCounter { private: Framework::Text name; Framework::RCArray quests; public: QuestCollection(Framework::Text name); void processEvent(QuestEvent* zEvent, QuestParty* zParty); bool isVisible(QuestParty* zParty); void giveReward(Framework::Text questId, int choice, Entity* zTargetEntity, QuestParty* zParty); void addQuest(Quest* zQuest); friend QuestCollectionType; }; class QuestCollectionType : public TypeFactory { public: QuestCollectionType(); QuestCollection* fromJson( Framework::JSON::JSONValue* zJson) const override; Framework::JSON::JSONValue* toJson( QuestCollection* zObject) const override; Framework::JSON::Validator::JSONValidator* getValidator() const override; }; class QuestManager : public virtual Framework::ReferenceCounter { private: Framework::RCArray questCollections; Framework::RCArray parties; public: QuestManager(); void loadQuests(); void saveQuests(); void processEvent(QuestEvent* event); void giveReward(Framework::Text questId, int choice, Entity* zTargetEntity); };