diff --git a/apps/openmw/CMakeLists.txt b/apps/openmw/CMakeLists.txt index d27ddae2d2..aea37ec507 100644 --- a/apps/openmw/CMakeLists.txt +++ b/apps/openmw/CMakeLists.txt @@ -89,6 +89,7 @@ set(GAMEWORLD mwworld/globals.cpp mwworld/class.cpp mwworld/actionteleport.cpp + mwworld/actiontalk.cpp ) set(GAMEWORLD_HEADER mwworld/refdata.hpp @@ -101,6 +102,7 @@ set(GAMEWORLD_HEADER mwworld/nullaction.hpp mwworld/actionteleport.hpp mwworld/containerstore.hpp + mwworld/actiontalk.hpp ) source_group(apps\\openmw\\mwworld FILES ${GAMEWORLD} ${GAMEWORLD_HEADER}) diff --git a/apps/openmw/mwclass/creature.cpp b/apps/openmw/mwclass/creature.cpp index 1fcca6f8cf..ea8f2f7a5b 100644 --- a/apps/openmw/mwclass/creature.cpp +++ b/apps/openmw/mwclass/creature.cpp @@ -6,6 +6,7 @@ #include "../mwmechanics/creaturestats.hpp" #include "../mwworld/ptr.hpp" +#include "../mwworld/actiontalk.hpp" namespace MWClass { @@ -58,6 +59,12 @@ namespace MWClass } return *ptr.getRefData().getContainerStore(); + } + + boost::shared_ptr Creature::activate (const MWWorld::Ptr& ptr, + const MWWorld::Ptr& actor, const MWWorld::Environment& environment) const + { + return boost::shared_ptr (new MWWorld::ActionTalk (ptr)); } std::string Creature::getScript (const MWWorld::Ptr& ptr) const diff --git a/apps/openmw/mwclass/creature.hpp b/apps/openmw/mwclass/creature.hpp index 57f217d066..7fb532fe70 100644 --- a/apps/openmw/mwclass/creature.hpp +++ b/apps/openmw/mwclass/creature.hpp @@ -20,6 +20,10 @@ namespace MWClass const MWWorld::Ptr& ptr) const; ///< Return container store + virtual boost::shared_ptr activate (const MWWorld::Ptr& ptr, + const MWWorld::Ptr& actor, const MWWorld::Environment& environment) const; + ///< Generate action for activation + virtual std::string getScript (const MWWorld::Ptr& ptr) const; ///< Return name of the script attached to ptr diff --git a/apps/openmw/mwclass/npc.cpp b/apps/openmw/mwclass/npc.cpp index 4941322489..ae647c802e 100644 --- a/apps/openmw/mwclass/npc.cpp +++ b/apps/openmw/mwclass/npc.cpp @@ -6,6 +6,7 @@ #include "../mwmechanics/creaturestats.hpp" #include "../mwworld/ptr.hpp" +#include "../mwworld/actiontalk.hpp" namespace MWClass { @@ -58,6 +59,12 @@ namespace MWClass } return *ptr.getRefData().getContainerStore(); + } + + boost::shared_ptr Npc::activate (const MWWorld::Ptr& ptr, + const MWWorld::Ptr& actor, const MWWorld::Environment& environment) const + { + return boost::shared_ptr (new MWWorld::ActionTalk (ptr)); } std::string Npc::getScript (const MWWorld::Ptr& ptr) const diff --git a/apps/openmw/mwclass/npc.hpp b/apps/openmw/mwclass/npc.hpp index 7147306f89..2ef37193a7 100644 --- a/apps/openmw/mwclass/npc.hpp +++ b/apps/openmw/mwclass/npc.hpp @@ -20,6 +20,10 @@ namespace MWClass const MWWorld::Ptr& ptr) const; ///< Return container store + virtual boost::shared_ptr activate (const MWWorld::Ptr& ptr, + const MWWorld::Ptr& actor, const MWWorld::Environment& environment) const; + ///< Generate action for activation + virtual std::string getScript (const MWWorld::Ptr& ptr) const; ///< Return name of the script attached to ptr diff --git a/apps/openmw/mwworld/actiontalk.cpp b/apps/openmw/mwworld/actiontalk.cpp new file mode 100644 index 0000000000..2b4aba735c --- /dev/null +++ b/apps/openmw/mwworld/actiontalk.cpp @@ -0,0 +1,16 @@ + +#include "actiontalk.hpp" + +#include "environment.hpp" + +#include "../mwgui/window_manager.hpp" + +namespace MWWorld +{ + ActionTalk::ActionTalk (const Ptr& actor) : mActor (actor) {} + + void ActionTalk::execute (Environment& environment) + { + environment.mWindowManager->setMode (MWGui::GM_Dialogue); + } +} diff --git a/apps/openmw/mwworld/actiontalk.hpp b/apps/openmw/mwworld/actiontalk.hpp new file mode 100644 index 0000000000..034d6131c2 --- /dev/null +++ b/apps/openmw/mwworld/actiontalk.hpp @@ -0,0 +1,21 @@ +#ifndef GAME_MWWORLD_ACTIONTALK_H +#define GAME_MWWORLD_ACTIONTALK_H + +#include "ptr.hpp" +#include "action.hpp" + +namespace MWWorld +{ + class ActionTalk : public Action + { + Ptr mActor; + + public: + + ActionTalk (const Ptr& actor); + + virtual void execute (Environment& environment); + }; +} + +#endif