From 1502b3f6f8f9ad80ed6b78cdd686c899f2829094 Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Thu, 8 Nov 2012 14:09:40 +0100 Subject: [PATCH] Issue #219: Begin of refactoring; added filter class (doesn't do anything yet) --- apps/openmw/CMakeLists.txt | 2 +- apps/openmw/mwdialogue/dialoguemanagerimp.cpp | 21 ++++++++++----- apps/openmw/mwdialogue/filter.cpp | 10 +++++++ apps/openmw/mwdialogue/filter.hpp | 26 +++++++++++++++++++ 4 files changed, 51 insertions(+), 8 deletions(-) create mode 100644 apps/openmw/mwdialogue/filter.cpp create mode 100644 apps/openmw/mwdialogue/filter.hpp diff --git a/apps/openmw/CMakeLists.txt b/apps/openmw/CMakeLists.txt index b9ce26a66..29f5f2ccc 100644 --- a/apps/openmw/CMakeLists.txt +++ b/apps/openmw/CMakeLists.txt @@ -34,7 +34,7 @@ add_openmw_dir (mwgui ) add_openmw_dir (mwdialogue - dialoguemanagerimp journalimp journalentry quest topic + dialoguemanagerimp journalimp journalentry quest topic filter ) add_openmw_dir (mwscript diff --git a/apps/openmw/mwdialogue/dialoguemanagerimp.cpp b/apps/openmw/mwdialogue/dialoguemanagerimp.cpp index 772a1914d..5838b8c0d 100644 --- a/apps/openmw/mwdialogue/dialoguemanagerimp.cpp +++ b/apps/openmw/mwdialogue/dialoguemanagerimp.cpp @@ -39,6 +39,8 @@ #include "../mwclass/npc.hpp" #include "../mwmechanics/npcstats.hpp" +#include "filter.hpp" + namespace { std::string toLower (const std::string& name) @@ -370,9 +372,7 @@ namespace MWDialogue return true; case '6': // dead -{ -std::cout<<"### "<countDeaths (toLower (name))< (comp, MWBase::Environment::get().getMechanicsManager()->countDeaths (toLower (name)), select.mI); @@ -653,6 +653,8 @@ std::cout<<"### "< &dialogs = MWBase::Environment::get().getWorld()->getStore().get(); + Filter filter (actor); + MWWorld::Store::iterator it = dialogs.begin(); for (; it != dialogs.end(); ++it) { @@ -662,7 +664,7 @@ std::cout<<"### "<::const_iterator iter (it->mInfo.begin()); iter!=it->mInfo.end(); ++iter) { - if (isMatching (actor, *iter) && functionFilter(mActor,*iter,true)) + if (filter (*iter) && isMatching (actor, *iter) && functionFilter(mActor,*iter,true)) { if (!iter->mSound.empty()) { @@ -755,6 +757,7 @@ std::cout<<"### "< &dialogs = MWBase::Environment::get().getWorld()->getStore().get(); + Filter filter (mActor); MWWorld::Store::iterator it = dialogs.begin(); for (; it != dialogs.end(); ++it) @@ -764,7 +767,7 @@ std::cout<<"### "<::const_iterator iter (it->mInfo.begin()); iter!=it->mInfo.end(); ++iter) { - if (isMatching (mActor, *iter) && functionFilter(mActor,*iter,true)) + if (filter (*iter) && isMatching (mActor, *iter) && functionFilter(mActor,*iter,true)) { mActorKnownTopics.push_back(toLower(it->mId)); //does the player know the topic? @@ -841,10 +844,12 @@ std::cout<<"### "<::const_iterator iter = ndialogue.mInfo.begin(); iter!=ndialogue.mInfo.end(); ++iter) { - if (isMatching (mActor, *iter) && functionFilter(mActor,*iter,true)) + if (filter (*iter) && isMatching (mActor, *iter) && functionFilter(mActor,*iter,true)) { std::string text = iter->mResponse; std::string script = iter->mResultScript; @@ -886,10 +891,12 @@ std::cout<<"### "<::const_iterator iter = ndialogue.mInfo.begin(); iter!=ndialogue.mInfo.end(); ++iter) { - if (isMatching (mActor, *iter) && functionFilter(mActor,*iter,true)) + if (filter (*iter) && isMatching (mActor, *iter) && functionFilter(mActor,*iter,true)) { mChoiceMap.clear(); mChoice = -1; diff --git a/apps/openmw/mwdialogue/filter.cpp b/apps/openmw/mwdialogue/filter.cpp new file mode 100644 index 000000000..982062e5b --- /dev/null +++ b/apps/openmw/mwdialogue/filter.cpp @@ -0,0 +1,10 @@ + +#include "filter.hpp" + +MWDialogue::Filter::Filter (const MWWorld::Ptr& actor) : mActor (actor) {} + +bool MWDialogue::Filter::operator() (const ESM::DialInfo& dialogue) +{ + + return true; +} diff --git a/apps/openmw/mwdialogue/filter.hpp b/apps/openmw/mwdialogue/filter.hpp new file mode 100644 index 000000000..519393782 --- /dev/null +++ b/apps/openmw/mwdialogue/filter.hpp @@ -0,0 +1,26 @@ +#ifndef GAME_MWDIALOGUE_FILTER_H +#define GAME_MWDIALOGUE_FILTER_H + +#include "../mwworld/ptr.hpp" + +namespace ESM +{ + struct DialInfo; +} + +namespace MWDialogue +{ + class Filter + { + MWWorld::Ptr mActor; + + public: + + Filter (const MWWorld::Ptr& actor); + + bool operator() (const ESM::DialInfo& dialogue); + ///< \return does the dialogue match? + }; +} + +#endif