diff --git a/apps/openmw/mwclass/container.cpp b/apps/openmw/mwclass/container.cpp index f77a9307cd..818f917353 100644 --- a/apps/openmw/mwclass/container.cpp +++ b/apps/openmw/mwclass/container.cpp @@ -181,7 +181,7 @@ namespace MWClass { MWBase::Environment::get().getWindowManager ()->messageBox (keyName + " #{sKeyUsed}"); if(isLocked) - unlock(ptr); + ptr.getCellRef().unlock(); // using a key disarms the trap if(isTrapped) { diff --git a/apps/openmw/mwclass/door.cpp b/apps/openmw/mwclass/door.cpp index b98a8cc994..ecb6ececfe 100644 --- a/apps/openmw/mwclass/door.cpp +++ b/apps/openmw/mwclass/door.cpp @@ -162,7 +162,7 @@ namespace MWClass if(actor == MWMechanics::getPlayer()) MWBase::Environment::get().getWindowManager()->messageBox(keyName + " #{sKeyUsed}"); if(isLocked) - unlock(ptr); //Call the function here. because that makes sense. + ptr.getCellRef().unlock(); //Call the function here. because that makes sense. // using a key disarms the trap if(isTrapped) { diff --git a/apps/openmw/mwmechanics/mechanicsmanagerimp.cpp b/apps/openmw/mwmechanics/mechanicsmanagerimp.cpp index 7547f086b2..a1994da02e 100644 --- a/apps/openmw/mwmechanics/mechanicsmanagerimp.cpp +++ b/apps/openmw/mwmechanics/mechanicsmanagerimp.cpp @@ -1150,7 +1150,7 @@ namespace MWMechanics store.remove(*it, toMove, player); } // TODO: unhardcode the locklevel - targetContainer.getClass().lock(targetContainer,50); + targetContainer.getCellRef().lock(50); } void MechanicsManager::itemTaken(const MWWorld::Ptr &ptr, const MWWorld::Ptr &item, const MWWorld::Ptr& container, diff --git a/apps/openmw/mwmechanics/security.cpp b/apps/openmw/mwmechanics/security.cpp index 62169c84a8..cafc65b992 100644 --- a/apps/openmw/mwmechanics/security.cpp +++ b/apps/openmw/mwmechanics/security.cpp @@ -50,7 +50,7 @@ namespace MWMechanics { if (Misc::Rng::roll0to99() <= x) { - lock.getClass().unlock(lock); + lock.getCellRef().unlock(); resultMessage = "#{sLockSuccess}"; resultSound = "Open Lock"; mActor.getClass().skillUsageSucceeded(mActor, ESM::Skill::Security, 1); diff --git a/apps/openmw/mwmechanics/spellcasting.cpp b/apps/openmw/mwmechanics/spellcasting.cpp index 359e74fc69..2d979e034a 100644 --- a/apps/openmw/mwmechanics/spellcasting.cpp +++ b/apps/openmw/mwmechanics/spellcasting.cpp @@ -696,7 +696,7 @@ namespace MWMechanics { if (caster == getPlayer()) MWBase::Environment::get().getWindowManager()->messageBox("#{sMagicLockSuccess}"); - target.getClass().lock(target, static_cast(magnitude)); + target.getCellRef().lock(static_cast(magnitude)); } return true; } @@ -716,7 +716,7 @@ namespace MWMechanics if (caster == getPlayer()) MWBase::Environment::get().getWindowManager()->messageBox("#{sMagicOpenSuccess}"); } - target.getClass().unlock(target); + target.getCellRef().unlock(); } else MWBase::Environment::get().getSoundManager()->playSound3D(target, "Open Lock Fail", 1.f, 1.f); diff --git a/apps/openmw/mwscript/miscextensions.cpp b/apps/openmw/mwscript/miscextensions.cpp index 29a25c9978..e2506edb86 100644 --- a/apps/openmw/mwscript/miscextensions.cpp +++ b/apps/openmw/mwscript/miscextensions.cpp @@ -182,7 +182,7 @@ namespace MWScript runtime.pop(); } - ptr.getClass().lock (ptr, lockLevel); + ptr.getCellRef().lock (lockLevel); // Instantly reset door to closed state // This is done when using Lock in scripts, but not when using Lock spells. @@ -202,7 +202,7 @@ namespace MWScript { MWWorld::Ptr ptr = R()(runtime); - ptr.getClass().unlock (ptr); + ptr.getCellRef().unlock (); } }; diff --git a/apps/openmw/mwworld/cellref.cpp b/apps/openmw/mwworld/cellref.cpp index 094669bddf..fb9fd592a9 100644 --- a/apps/openmw/mwworld/cellref.cpp +++ b/apps/openmw/mwworld/cellref.cpp @@ -225,6 +225,19 @@ namespace MWWorld } } + void CellRef::lock(int lockLevel) + { + if(lockLevel != 0) + setLockLevel(abs(lockLevel)); //Changes lock to locklevel, if positive + else + setLockLevel(ESM::UnbreakableLock); // If zero, set to max lock level + } + + void CellRef::unlock() + { + setLockLevel(-abs(mCellRef.mLockLevel)); //Makes lockLevel negative + } + std::string CellRef::getKey() const { return mCellRef.mKey; diff --git a/apps/openmw/mwworld/cellref.hpp b/apps/openmw/mwworld/cellref.hpp index 5646bafb04..04e807ce59 100644 --- a/apps/openmw/mwworld/cellref.hpp +++ b/apps/openmw/mwworld/cellref.hpp @@ -99,6 +99,8 @@ namespace MWWorld // For an unlocked door, it is set to -(previous locklevel) int getLockLevel() const; void setLockLevel(int lockLevel); + void lock(int lockLevel); + void unlock(); // Key and trap ID names, if any std::string getKey() const; std::string getTrap() const; diff --git a/apps/openmw/mwworld/class.cpp b/apps/openmw/mwworld/class.cpp index 3efc00491b..cd1f719d6d 100644 --- a/apps/openmw/mwworld/class.cpp +++ b/apps/openmw/mwworld/class.cpp @@ -144,20 +144,6 @@ namespace MWWorld return false; } - void Class::lock (const Ptr& ptr, int lockLevel) const - { - if(lockLevel != 0) - ptr.getCellRef().setLockLevel(abs(lockLevel)); //Changes lock to locklevel, if positive - else - ptr.getCellRef().setLockLevel(ESM::UnbreakableLock); // If zero, set to max lock level - } - - void Class::unlock (const Ptr& ptr) const - { - int lockLevel = ptr.getCellRef().getLockLevel(); - ptr.getCellRef().setLockLevel(-abs(lockLevel)); //Makes lockLevel negative - } - bool Class::canLock(const ConstPtr &ptr) const { return false; diff --git a/apps/openmw/mwworld/class.hpp b/apps/openmw/mwworld/class.hpp index 964ef19a5f..0d3a0e8075 100644 --- a/apps/openmw/mwworld/class.hpp +++ b/apps/openmw/mwworld/class.hpp @@ -163,12 +163,6 @@ namespace MWWorld virtual bool hasInventoryStore (const Ptr& ptr) const; ///< Does this object have an inventory store, i.e. equipment slots? (default implementation: false) - virtual void lock (const Ptr& ptr, int lockLevel) const; - ///< Lock object (default implementation: throw an exception) - - virtual void unlock (const Ptr& ptr) const; - ///< Unlock object (default implementation: throw an exception) - virtual bool canLock (const ConstPtr& ptr) const; virtual void setRemainingUsageTime (const Ptr& ptr, float duration) const;