diff --git a/apps/openmw/mwclass/container.cpp b/apps/openmw/mwclass/container.cpp index 1ad9e845ea..c586069962 100644 --- a/apps/openmw/mwclass/container.cpp +++ b/apps/openmw/mwclass/container.cpp @@ -6,11 +6,15 @@ #include #include "../mwworld/ptr.hpp" +#include "../mwworld/nullaction.hpp" #include "../mwworld/containerstore.hpp" #include "../mwworld/customdata.hpp" +#include "../mwworld/environment.hpp" #include "../mwrender/objects.hpp" +#include "../mwsound/soundmanager.hpp" + namespace { struct CustomData : public MWWorld::CustomData @@ -71,6 +75,38 @@ namespace MWClass } + boost::shared_ptr Container::activate (const MWWorld::Ptr& ptr, + const MWWorld::Ptr& actor, const MWWorld::Environment& environment) const + { + const std::string lockedSound = "LockedChest"; + const std::string trapActivationSound = "Disarm Trap Fail"; + + if (ptr.getCellRef().lockLevel>0) + { + // TODO check for key + std::cout << "Locked container" << std::endl; + environment.mSoundManager->playSound(lockedSound, 1.0, 1.0); + return boost::shared_ptr (new MWWorld::NullAction); + } + else + { + std::cout << "Unlocked container" << std::endl; + if(ptr.getCellRef().trap.empty()) + { + // Not trapped, Inventory GUI goes here + return boost::shared_ptr (new MWWorld::NullAction); + } + else + { + // Trap activation goes here + std::cout << "Activated trap: " << ptr.getCellRef().trap << std::endl; + environment.mSoundManager->playSound(trapActivationSound, 1.0, 1.0); + ptr.getCellRef().trap = ""; + return boost::shared_ptr (new MWWorld::NullAction); + } + } + } + std::string Container::getName (const MWWorld::Ptr& ptr) const { ESMS::LiveCellRef *ref = diff --git a/apps/openmw/mwclass/container.hpp b/apps/openmw/mwclass/container.hpp index 66a47a9568..387714176b 100644 --- a/apps/openmw/mwclass/container.hpp +++ b/apps/openmw/mwclass/container.hpp @@ -20,6 +20,10 @@ namespace MWClass ///< \return name (the one that is to be presented to the user; not the internal one); /// can return an empty string. + virtual boost::shared_ptr activate (const MWWorld::Ptr& ptr, + const MWWorld::Ptr& actor, const MWWorld::Environment& environment) const; + ///< Generate action for activation + virtual MWWorld::ContainerStore& getContainerStore (const MWWorld::Ptr& ptr) const; ///< Return container store diff --git a/apps/openmw/mwclass/door.cpp b/apps/openmw/mwclass/door.cpp index d0b3b11a2f..bd7af9597a 100644 --- a/apps/openmw/mwclass/door.cpp +++ b/apps/openmw/mwclass/door.cpp @@ -14,6 +14,8 @@ #include "../mwrender/objects.hpp" +#include "../mwsound/soundmanager.hpp" + namespace MWClass { void Door::insertObjectRendering (const MWWorld::Ptr& ptr, MWRender::RenderingInterface& renderingInterface) const @@ -61,15 +63,28 @@ namespace MWClass ESMS::LiveCellRef *ref = ptr.get(); + const std::string &openSound = ref->base->openSound; + //const std::string &closeSound = ref->base->closeSound; + const std::string lockedSound = "LockedDoor"; + const std::string trapActivationSound = "Disarm Trap Fail"; + if (ptr.getCellRef().lockLevel>0) { // TODO check for key // TODO report failure to player (message, sound?). Look up behaviour of original MW. std::cout << "Locked!" << std::endl; + environment.mSoundManager->playSound(lockedSound, 1.0, 1.0); return boost::shared_ptr (new MWWorld::NullAction); } - // TODO check trap + if(!ptr.getCellRef().trap.empty()) + { + // Trap activation + std::cout << "Activated trap: " << ptr.getCellRef().trap << std::endl; + environment.mSoundManager->playSound(trapActivationSound, 1.0, 1.0); + ptr.getCellRef().trap = ""; + return boost::shared_ptr (new MWWorld::NullAction); + } if (ref->ref.teleport) { @@ -77,6 +92,7 @@ namespace MWClass if (environment.mWorld->getPlayer().getPlayer()==actor) { // the player is using the door + environment.mSoundManager->playSound(openSound, 1.0, 1.0); return boost::shared_ptr ( new MWWorld::ActionTeleportPlayer (ref->ref.destCell, ref->ref.doorDest)); } @@ -91,6 +107,9 @@ namespace MWClass { // animated door // TODO return action for rotating the door + + // This is a little pointless, but helps with testing + environment.mSoundManager->playSound(openSound, 1.0, 1.0); return boost::shared_ptr (new MWWorld::NullAction); } }