From 37e91a278e1390c47488f28e14ff16d8e47609ef Mon Sep 17 00:00:00 2001 From: Emanuel Guevel <guevel.emanuel@gmail.com> Date: Fri, 1 Nov 2013 00:21:15 +0100 Subject: [PATCH] Add InventoryStore::unequipItem() --- apps/openmw/mwworld/inventorystore.cpp | 12 ++++++++++++ apps/openmw/mwworld/inventorystore.hpp | 8 ++++++++ 2 files changed, 20 insertions(+) diff --git a/apps/openmw/mwworld/inventorystore.cpp b/apps/openmw/mwworld/inventorystore.cpp index 4d7fa2d64..4291c120f 100644 --- a/apps/openmw/mwworld/inventorystore.cpp +++ b/apps/openmw/mwworld/inventorystore.cpp @@ -386,3 +386,15 @@ MWWorld::ContainerStoreIterator MWWorld::InventoryStore::unequipSlot(int slot, c return it; } + +MWWorld::ContainerStoreIterator MWWorld::InventoryStore::unequipItem(const MWWorld::Ptr& item, const MWWorld::Ptr& actor) +{ + for (int slot=0; slot<MWWorld::InventoryStore::Slots; ++slot) + { + MWWorld::ContainerStoreIterator equipped = getSlot(slot); + if (equipped != end() && *equipped == item) + return unequipSlot(slot, actor); + } + + throw std::runtime_error ("attempt to unequip an item that is not currently equipped"); +} diff --git a/apps/openmw/mwworld/inventorystore.hpp b/apps/openmw/mwworld/inventorystore.hpp index 1b11d9dce..199c42243 100644 --- a/apps/openmw/mwworld/inventorystore.hpp +++ b/apps/openmw/mwworld/inventorystore.hpp @@ -119,6 +119,14 @@ namespace MWWorld /// @return an iterator to the item that was previously in the slot /// (it can be re-stacked so its count may be different than when it /// was equipped). + + ContainerStoreIterator unequipItem(const Ptr& item, const Ptr& actor); + ///< Unequip an item identified by its Ptr. An exception is thrown + /// if the item is not currently equipped. + /// + /// @return an iterator to the item that was previously in the slot + /// (it can be re-stacked so its count may be different than when it + /// was equipped). }; }