mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-01-16 18:19:55 +00:00
Dialogue: Use std::set for known topics in the manager.
There were three different data structures being used for topic lists in this code. (map< string, true >, list< string >, and vector< string >) Switch the local topic lists to set< string >. This supports everything the list and map were doing, reduces the variety of data structures, and makes count (a more efficient search) available. The vector has not changed, since it's tied to the ESM modules, and must meet other requirements.
This commit is contained in:
parent
05be353fec
commit
419046e121
2 changed files with 14 additions and 12 deletions
|
@ -5,6 +5,7 @@
|
|||
#include <cstdlib>
|
||||
#include <algorithm>
|
||||
#include <iterator>
|
||||
#include <list>
|
||||
|
||||
#include <components/esm/loaddial.hpp>
|
||||
#include <components/esm/loadinfo.hpp>
|
||||
|
@ -78,7 +79,7 @@ namespace MWDialogue
|
|||
|
||||
void DialogueManager::addTopic (const std::string& topic)
|
||||
{
|
||||
mKnownTopics[Misc::StringUtils::lowerCase(topic)] = true;
|
||||
mKnownTopics.insert( Misc::StringUtils::lowerCase(topic) );
|
||||
}
|
||||
|
||||
void DialogueManager::parseText (const std::string& text)
|
||||
|
@ -102,8 +103,8 @@ namespace MWDialogue
|
|||
if (tok->isImplicitKeyword() && mTranslationDataStorage.hasTranslation())
|
||||
continue;
|
||||
|
||||
if (std::find(mActorKnownTopics.begin(), mActorKnownTopics.end(), topicId) != mActorKnownTopics.end())
|
||||
mKnownTopics[topicId] = true;
|
||||
if (mActorKnownTopics.count( topicId ))
|
||||
mKnownTopics.insert( topicId );
|
||||
}
|
||||
|
||||
updateTopics();
|
||||
|
@ -341,10 +342,10 @@ namespace MWDialogue
|
|||
if (filter.responseAvailable (*iter))
|
||||
{
|
||||
std::string lower = Misc::StringUtils::lowerCase(iter->mId);
|
||||
mActorKnownTopics.push_back (lower);
|
||||
mActorKnownTopics.insert (lower);
|
||||
|
||||
//does the player know the topic?
|
||||
if (mKnownTopics.find (lower) != mKnownTopics.end())
|
||||
if (mKnownTopics.count(lower))
|
||||
{
|
||||
keywordList.push_back (iter->mId);
|
||||
}
|
||||
|
@ -635,10 +636,11 @@ namespace MWDialogue
|
|||
{
|
||||
ESM::DialogueState state;
|
||||
|
||||
for (std::map<std::string, bool>::const_iterator iter (mKnownTopics.begin());
|
||||
for (std::set<std::string>::const_iterator iter (mKnownTopics.begin());
|
||||
iter!=mKnownTopics.end(); ++iter)
|
||||
if (iter->second)
|
||||
state.mKnownTopics.push_back (iter->first);
|
||||
{
|
||||
state.mKnownTopics.push_back (*iter);
|
||||
}
|
||||
|
||||
state.mChangedFactionReaction = mChangedFactionReaction;
|
||||
|
||||
|
@ -659,7 +661,7 @@ namespace MWDialogue
|
|||
for (std::vector<std::string>::const_iterator iter (state.mKnownTopics.begin());
|
||||
iter!=state.mKnownTopics.end(); ++iter)
|
||||
if (store.get<ESM::Dialogue>().search (*iter))
|
||||
mKnownTopics.insert (std::make_pair (*iter, true));
|
||||
mKnownTopics.insert (*iter);
|
||||
|
||||
mChangedFactionReaction = state.mChangedFactionReaction;
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
#include "../mwbase/dialoguemanager.hpp"
|
||||
|
||||
#include <map>
|
||||
#include <list>
|
||||
#include <set>
|
||||
|
||||
#include <components/compiler/streamerrorhandler.hpp>
|
||||
#include <components/translation/translation.hpp>
|
||||
|
@ -23,13 +23,13 @@ namespace MWDialogue
|
|||
class DialogueManager : public MWBase::DialogueManager
|
||||
{
|
||||
std::map<std::string, ESM::Dialogue> mDialogueMap;
|
||||
std::map<std::string, bool> mKnownTopics;// Those are the topics the player knows.
|
||||
std::set<std::string> mKnownTopics;// Those are the topics the player knows.
|
||||
|
||||
// Modified faction reactions. <Faction1, <Faction2, Difference> >
|
||||
typedef std::map<std::string, std::map<std::string, int> > ModFactionReactionMap;
|
||||
ModFactionReactionMap mChangedFactionReaction;
|
||||
|
||||
std::list<std::string> mActorKnownTopics;
|
||||
std::set<std::string> mActorKnownTopics;
|
||||
|
||||
Translation::Storage& mTranslationDataStorage;
|
||||
MWScript::CompilerContext mCompilerContext;
|
||||
|
|
Loading…
Reference in a new issue