From 9d25e74a051837a1f70dc09b35d55573d0941829 Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Sun, 8 Aug 2010 11:34:03 +0200 Subject: [PATCH] on dialogue start run through the info records of dialogue record 'hello'; currently no testing done -> the first info recrod will match --- apps/openmw/mwdialogue/dialoguemanager.cpp | 61 ++++++++++++++++++++++ apps/openmw/mwdialogue/dialoguemanager.hpp | 7 +++ 2 files changed, 68 insertions(+) diff --git a/apps/openmw/mwdialogue/dialoguemanager.cpp b/apps/openmw/mwdialogue/dialoguemanager.cpp index 22602a3f77..c11e2bb0d8 100644 --- a/apps/openmw/mwdialogue/dialoguemanager.cpp +++ b/apps/openmw/mwdialogue/dialoguemanager.cpp @@ -1,17 +1,78 @@ #include "dialoguemanager.hpp" +#include +#include + +#include + #include "../mwworld/class.hpp" +#include "../mwworld/environment.hpp" +#include "../mwworld/world.hpp" #include namespace MWDialogue { + bool DialogueManager::isMatching (const MWWorld::Ptr& actor, const ESM::DialInfo& info) const + { + // TODO check actor id + // TODO check actor race + // TODO check actor class + // TODO check actor faction + // TODO check player faction + // TODO check cell + // TODO check DATAstruct + // TODO check select structures + + std::cout + << "unchecked entries:" << std::endl + << " actor id: " << info.actor << std::endl + << " actor race: " << info.race << std::endl + << " actor class: " << info.clas << std::endl + << " actor faction: " << info.npcFaction << std::endl + << " player faction: " << info.pcFaction << std::endl + << " cell: " << info.cell << std::endl + << " DATAstruct" << std::endl; + + for (std::vector::const_iterator iter (info.selects.begin()); + iter != info.selects.end(); ++iter) + std::cout << " select: " << iter->selectRule << std::endl; + + return true; + } + DialogueManager::DialogueManager (MWWorld::Environment& environment) : mEnvironment (environment) {} void DialogueManager::startDialogue (const MWWorld::Ptr& actor) { std::cout << "talking with " << MWWorld::Class::get (actor).getName (actor) << std::endl; + + const ESM::Dialogue *dialogue = mEnvironment.mWorld->getStore().dialogs.find ("hello"); + + for (std::vector::const_iterator iter (dialogue->mInfo.begin()); + iter!=dialogue->mInfo.end(); ++iter) + { + if (isMatching (actor, *iter)) + { + // start dialogue + std::cout << "found matching info record" << std::endl; + + std::cout << "response: " << iter->response << std::endl; + + if (!iter->sound.empty()) + { + // TODO play sound + } + + if (!iter->resultScript.empty()) + { + // TODO execute script + } + + break; + } + } } } diff --git a/apps/openmw/mwdialogue/dialoguemanager.hpp b/apps/openmw/mwdialogue/dialoguemanager.hpp index b31a3d0632..d51570b11e 100644 --- a/apps/openmw/mwdialogue/dialoguemanager.hpp +++ b/apps/openmw/mwdialogue/dialoguemanager.hpp @@ -3,6 +3,11 @@ #include "../mwworld/ptr.hpp" +namespace ESM +{ + struct DialInfo; +} + namespace MWWorld { class Environment; @@ -14,6 +19,8 @@ namespace MWDialogue { MWWorld::Environment& mEnvironment; + bool isMatching (const MWWorld::Ptr& actor, const ESM::DialInfo& info) const; + public: DialogueManager (MWWorld::Environment& environment);