diff options
author | Kae <80987908+Novaenia@users.noreply.github.com> | 2023-06-20 14:33:09 +1000 |
---|---|---|
committer | Kae <80987908+Novaenia@users.noreply.github.com> | 2023-06-20 14:33:09 +1000 |
commit | 6352e8e3196f78388b6c771073f9e03eaa612673 (patch) | |
tree | e23772f79a7fbc41bc9108951e9e136857484bf4 /source/game/StarQuestManager.hpp | |
parent | 6741a057e5639280d85d0f88ba26f000baa58f61 (diff) |
everything everywhere
all at once
Diffstat (limited to 'source/game/StarQuestManager.hpp')
-rw-r--r-- | source/game/StarQuestManager.hpp | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/source/game/StarQuestManager.hpp b/source/game/StarQuestManager.hpp new file mode 100644 index 0000000..33eb34d --- /dev/null +++ b/source/game/StarQuestManager.hpp @@ -0,0 +1,81 @@ +#ifndef STAR_QUEST_MANAGER_HPP +#define STAR_QUEST_MANAGER_HPP + +#include "StarQuests.hpp" + +namespace Star { + +STAR_CLASS(QuestManager); + +struct QuestIndicator { + String indicatorImage; + Vec2F worldPosition; +}; + +class QuestManager { +public: + QuestManager(Player* player); + + void diskLoad(Json const& quests); + Json diskStore(); + + void setUniverseClient(UniverseClient* client); + + void init(World* world); + void uninit(); + + bool canStart(QuestArcDescriptor const& questArc) const; + + // Show a dialog offering the player a quest, and later start it if they + // accept it. + void offer(QuestPtr const& quest); + QuestPtr getQuest(String const& questId) const; + + bool hasQuest(String const& questId) const; + bool hasAcceptedQuest(String const& questId) const; + bool isActive(String const& questId) const; + bool isCurrent(String const& questId) const; + bool isTracked(String const& questId) const; + void setAsTracked(Maybe<String> const& questId); + void markAsRead(String const& questId); + bool hasCompleted(String const& questId) const; + bool canTurnIn(String const& questId) const; + + Maybe<QuestPtr> getFirstNewQuest(); + Maybe<QuestPtr> getFirstCompletableQuest(); + Maybe<QuestPtr> getFirstFailableQuest(); + Maybe<QuestPtr> getFirstMainQuest(); + + List<QuestPtr> listActiveQuests() const; + List<QuestPtr> listCompletedQuests() const; + List<QuestPtr> listFailedQuests() const; + + Maybe<QuestPtr> currentQuest() const; + Maybe<QuestPtr> trackedQuest() const; + Maybe<QuestIndicator> getQuestIndicator(EntityPtr const& entity) const; + + // Handled at this level to allow multiple active quests to specify interestingObjects + StringSet interestingObjects(); + + Maybe<Json> receiveMessage(String const& message, bool localMessage, JsonArray const& args = {}); + void update(); + +private: + List<QuestPtr> serverQuests() const; + void startInitialQuests(); + void setMostRecentQuestCurrent(); + + Player* m_player; + World* m_world; + UniverseClient* m_client; + + StringMap<QuestPtr> m_quests; + + Maybe<String> m_trackedQuestId; + bool m_trackOnWorldQuests; + Maybe<String> m_onWorldQuestId; +}; + +} + +#endif |