#ifndef GAME_MWDIALOG_QUEST_H #define GAME_MWDIALOG_QUEST_H #include "topic.hpp" namespace ESM { struct QuestState; } namespace MWDialogue { /// \brief A quest in progress or a completed quest class Quest : public Topic { int mIndex; bool mFinished; public: Quest(); Quest(const ESM::RefId& topic); Quest(const ESM::QuestState& state); std::string_view getName() const override; ///< May be an empty string int getIndex() const; void setIndex(int index); ///< Calling this function with a non-existent index will throw an exception. bool isFinished() const; void setFinished(bool finished); bool addEntry(const JournalEntry& entry) override; ///< Add entry and adjust index accordingly. Returns true if the quest should be restarted. /// /// \note Redundant entries are ignored, but the index is still adjusted. void write(ESM::QuestState& state) const; }; } #endif