1
0
mirror of https://gitlab.com/OpenMW/openmw.git synced 2025-01-27 03:35:27 +00:00
OpenMW/apps/openmw/mwbase/dialoguemanager.hpp

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

121 lines
3.3 KiB
C++
Raw Normal View History

2012-08-09 12:05:47 +02:00
#ifndef GAME_MWBASE_DIALOGUEMANAGER_H
#define GAME_MWBASE_DIALOGUEMANAGER_H
2022-09-22 21:26:05 +03:00
#include <list>
#include <string>
2022-05-21 10:48:32 +02:00
#include <string_view>
#include <vector>
#include <cstdint>
namespace Loading
{
class Listener;
}
namespace ESM
{
class ESMReader;
class ESMWriter;
}
namespace MWWorld
{
class Ptr;
}
namespace MWBase
{
2012-08-09 12:05:47 +02:00
/// \brief Interface for dialogue manager (implemented in MWDialogue)
class DialogueManager
{
2022-09-22 21:26:05 +03:00
DialogueManager(const DialogueManager&);
///< not implemented
2022-09-22 21:26:05 +03:00
DialogueManager& operator=(const DialogueManager&);
///< not implemented
2022-09-22 21:26:05 +03:00
public:
class ResponseCallback
{
public:
2022-09-22 21:26:05 +03:00
virtual ~ResponseCallback() = default;
virtual void addResponse(const std::string& title, const std::string& text) = 0;
};
2022-09-22 21:26:05 +03:00
DialogueManager() {}
2022-09-22 21:26:05 +03:00
virtual void clear() = 0;
2013-05-15 17:54:18 +02:00
2022-09-22 21:26:05 +03:00
virtual ~DialogueManager() {}
2022-09-22 21:26:05 +03:00
virtual bool isInChoice() const = 0;
2013-03-31 13:13:46 +02:00
2022-09-22 21:26:05 +03:00
virtual bool startDialogue(const MWWorld::Ptr& actor, ResponseCallback* callback) = 0;
2022-09-22 21:26:05 +03:00
virtual bool inJournal(const std::string& topicId, const std::string& infoId) = 0;
2022-09-22 21:26:05 +03:00
virtual void addTopic(std::string_view topic) = 0;
2022-09-22 21:26:05 +03:00
virtual void addChoice(std::string_view text, int choice) = 0;
virtual const std::vector<std::pair<std::string, int>>& getChoices() = 0;
2022-09-22 21:26:05 +03:00
virtual bool isGoodbye() = 0;
2022-09-22 21:26:05 +03:00
virtual void goodbye() = 0;
2022-09-22 21:26:05 +03:00
virtual void say(const MWWorld::Ptr& actor, const std::string& topic) = 0;
2022-09-22 21:26:05 +03:00
virtual void keywordSelected(const std::string& keyword, ResponseCallback* callback) = 0;
virtual void goodbyeSelected() = 0;
virtual void questionAnswered(int answer, ResponseCallback* callback) = 0;
2022-09-22 21:26:05 +03:00
enum TopicType
{
Specific = 1,
Exhausted = 2
};
2022-09-22 21:26:05 +03:00
enum ServiceType
{
Any = -1,
Barter = 1,
Repair = 2,
Spells = 3,
Training = 4,
Travel = 5,
Spellmaking = 6,
Enchanting = 7
};
2022-09-22 21:26:05 +03:00
virtual std::list<std::string> getAvailableTopics() = 0;
virtual int getTopicFlag(const std::string&) = 0;
2012-11-10 00:29:36 +01:00
2022-09-22 21:26:05 +03:00
virtual bool checkServiceRefused(ResponseCallback* callback, ServiceType service = ServiceType::Any) = 0;
2013-03-16 20:32:21 +01:00
2022-09-22 21:26:05 +03:00
virtual void persuade(int type, ResponseCallback* callback) = 0;
2022-09-22 21:26:05 +03:00
/// @note Controlled by an option, gets discarded when dialogue ends by default
virtual void applyBarterDispositionChange(int delta) = 0;
2022-09-22 21:26:05 +03:00
virtual int countSavedGameRecords() const = 0;
2022-09-22 21:26:05 +03:00
virtual void write(ESM::ESMWriter& writer, Loading::Listener& progress) const = 0;
2022-09-22 21:26:05 +03:00
virtual void readRecord(ESM::ESMReader& reader, uint32_t type) = 0;
2022-09-22 21:26:05 +03:00
/// Changes faction1's opinion of faction2 by \a diff.
virtual void modFactionReaction(std::string_view faction1, std::string_view faction2, int diff) = 0;
2022-09-22 21:26:05 +03:00
virtual void setFactionReaction(std::string_view faction1, std::string_view faction2, int absolute) = 0;
2022-09-22 21:26:05 +03:00
/// @return faction1's opinion of faction2
virtual int getFactionReaction(std::string_view faction1, std::string_view faction2) const = 0;
2022-09-22 21:26:05 +03:00
/// Removes the last added topic response for the given actor from the journal
virtual void clearInfoActor(const MWWorld::Ptr& actor) const = 0;
};
}
#endif