From 2d8f0949a475d7dcf7b7854d9f4c601c46f8a954 Mon Sep 17 00:00:00 2001 From: scrawl Date: Thu, 14 Mar 2013 20:27:16 +0100 Subject: [PATCH 1/3] Always run key (Y) --- apps/openmw/mwclass/npc.cpp | 18 ++++++++++++++++++ apps/openmw/mwclass/npc.hpp | 3 +++ apps/openmw/mwinput/inputmanagerimp.cpp | 5 ++++- apps/openmw/mwinput/inputmanagerimp.hpp | 2 +- apps/openmw/mwworld/class.cpp | 5 +++++ apps/openmw/mwworld/class.hpp | 3 +++ apps/openmw/mwworld/player.cpp | 4 ++-- 7 files changed, 36 insertions(+), 4 deletions(-) diff --git a/apps/openmw/mwclass/npc.cpp b/apps/openmw/mwclass/npc.cpp index d4e5e5cd67..77b53ff1d9 100644 --- a/apps/openmw/mwclass/npc.cpp +++ b/apps/openmw/mwclass/npc.cpp @@ -322,6 +322,24 @@ namespace MWClass return false; } + bool Npc::getForceStance(const MWWorld::Ptr& ptr, Stance stance) const + { + MWMechanics::NpcStats& stats = getNpcStats (ptr); + + switch (stance) + { + case Run: + return stats.getMovementFlag (MWMechanics::NpcStats::Flag_ForceRun); + case Sneak: + return stats.getMovementFlag (MWMechanics::NpcStats::Flag_ForceSneak); + + case Combat: + return false; + } + + return false; + } + float Npc::getSpeed(const MWWorld::Ptr& ptr) const { const MWBase::World *world = MWBase::Environment::get().getWorld(); diff --git a/apps/openmw/mwclass/npc.hpp b/apps/openmw/mwclass/npc.hpp index f41edb0df6..4698a1b9f3 100644 --- a/apps/openmw/mwclass/npc.hpp +++ b/apps/openmw/mwclass/npc.hpp @@ -76,6 +76,9 @@ namespace MWClass virtual void setForceStance (const MWWorld::Ptr& ptr, Stance stance, bool force) const; ///< Force or unforce a stance. + virtual bool getForceStance (const MWWorld::Ptr& ptr, Stance stance) const; + ///< Check if a stance forced. + virtual void setStance (const MWWorld::Ptr& ptr, Stance stance, bool set) const; ///< Set or unset a stance. diff --git a/apps/openmw/mwinput/inputmanagerimp.cpp b/apps/openmw/mwinput/inputmanagerimp.cpp index f18c02a0e8..72e9902837 100644 --- a/apps/openmw/mwinput/inputmanagerimp.cpp +++ b/apps/openmw/mwinput/inputmanagerimp.cpp @@ -193,7 +193,7 @@ namespace MWInput case A_AutoMove: toggleAutoMove (); break; - case A_ToggleWalk: + case A_AlwaysRun: toggleWalking (); break; case A_ToggleWeapon: @@ -768,6 +768,7 @@ namespace MWInput defaultKeyBindings[A_QuickKey10] = OIS::KC_0; defaultKeyBindings[A_Screenshot] = OIS::KC_SYSRQ; defaultKeyBindings[A_ToggleHUD] = OIS::KC_F12; + defaultKeyBindings[A_AlwaysRun] = OIS::KC_Y; std::map defaultMouseButtonBindings; defaultMouseButtonBindings[A_Inventory] = OIS::MB_Right; @@ -834,6 +835,7 @@ namespace MWInput descriptions[A_QuickKey8] = "sQuick8Cmd"; descriptions[A_QuickKey9] = "sQuick9Cmd"; descriptions[A_QuickKey10] = "sQuick10Cmd"; + descriptions[A_AlwaysRun] = "sAlways_Run"; if (descriptions[action] == "") return ""; // not configurable @@ -865,6 +867,7 @@ namespace MWInput ret.push_back(A_MoveRight); ret.push_back(A_TogglePOV); ret.push_back(A_Run); + ret.push_back(A_AlwaysRun); ret.push_back(A_Sneak); ret.push_back(A_Activate); ret.push_back(A_ToggleWeapon); diff --git a/apps/openmw/mwinput/inputmanagerimp.hpp b/apps/openmw/mwinput/inputmanagerimp.hpp index 8bb20b7bed..34c8327566 100644 --- a/apps/openmw/mwinput/inputmanagerimp.hpp +++ b/apps/openmw/mwinput/inputmanagerimp.hpp @@ -217,7 +217,7 @@ namespace MWInput A_CycleWeaponLeft,//Cycling through weapons A_CycleWeaponRight, A_ToggleSneak, //Toggles Sneak - A_ToggleWalk, //Toggle Walking/Running + A_AlwaysRun, //Toggle Walking/Running A_Sneak, A_QuickSave, diff --git a/apps/openmw/mwworld/class.cpp b/apps/openmw/mwworld/class.cpp index 71b24b65dc..2bc4941a26 100644 --- a/apps/openmw/mwworld/class.cpp +++ b/apps/openmw/mwworld/class.cpp @@ -117,6 +117,11 @@ namespace MWWorld return false; } + bool Class::getForceStance (const Ptr& ptr, Stance stance) const + { + return false; + } + float Class::getSpeed (const Ptr& ptr) const { return 0; diff --git a/apps/openmw/mwworld/class.hpp b/apps/openmw/mwworld/class.hpp index 1a6a16ca07..d36e3bc584 100644 --- a/apps/openmw/mwworld/class.hpp +++ b/apps/openmw/mwworld/class.hpp @@ -131,6 +131,9 @@ namespace MWWorld virtual void setForceStance (const Ptr& ptr, Stance stance, bool force) const; ///< Force or unforce a stance. + virtual bool getForceStance (const Ptr& ptr, Stance stance) const; + ///< Check if a stance forced. + virtual void setStance (const Ptr& ptr, Stance stance, bool set) const; ///< Set or unset a stance. diff --git a/apps/openmw/mwworld/player.cpp b/apps/openmw/mwworld/player.cpp index 03dd1abc79..5407e3a684 100644 --- a/apps/openmw/mwworld/player.cpp +++ b/apps/openmw/mwworld/player.cpp @@ -81,9 +81,9 @@ namespace MWWorld { MWWorld::Ptr ptr = getPlayer(); - bool running = MWWorld::Class::get (ptr).getStance (ptr, MWWorld::Class::Run, true); + bool running = MWWorld::Class::get (ptr).getForceStance(ptr, MWWorld::Class::Run); - MWWorld::Class::get (ptr).setStance (ptr, MWWorld::Class::Run, !running); + MWWorld::Class::get (ptr).setForceStance(ptr, MWWorld::Class::Run, !running); } void Player::setSneak(bool sneak) From 5b943a965f5334356682511420715d35f522c847 Mon Sep 17 00:00:00 2001 From: scrawl Date: Thu, 14 Mar 2013 21:08:19 +0100 Subject: [PATCH 2/3] Handle always run in the inputmanager, instead of using forced stance. --- apps/openmw/mwclass/npc.hpp | 2 +- apps/openmw/mwinput/inputmanagerimp.cpp | 9 +++++---- apps/openmw/mwinput/inputmanagerimp.hpp | 1 + apps/openmw/mwworld/class.cpp | 5 ----- apps/openmw/mwworld/class.hpp | 3 --- apps/openmw/mwworld/player.cpp | 9 --------- apps/openmw/mwworld/player.hpp | 1 - 7 files changed, 7 insertions(+), 23 deletions(-) diff --git a/apps/openmw/mwclass/npc.hpp b/apps/openmw/mwclass/npc.hpp index 4698a1b9f3..bd624bd373 100644 --- a/apps/openmw/mwclass/npc.hpp +++ b/apps/openmw/mwclass/npc.hpp @@ -84,7 +84,7 @@ namespace MWClass virtual bool getStance (const MWWorld::Ptr& ptr, Stance stance, bool ignoreForce = false) const; - ////< Check if a stance is active or not. + ///< Check if a stance is active or not. virtual float getSpeed (const MWWorld::Ptr& ptr) const; ///< Return movement speed. diff --git a/apps/openmw/mwinput/inputmanagerimp.cpp b/apps/openmw/mwinput/inputmanagerimp.cpp index 72e9902837..006729b337 100644 --- a/apps/openmw/mwinput/inputmanagerimp.cpp +++ b/apps/openmw/mwinput/inputmanagerimp.cpp @@ -55,6 +55,7 @@ namespace MWInput , mPreviewPOVDelay(0.f) , mTimeIdle(0.f) , mOverencumberedMessageDelay(0.f) + , mAlwaysRunActive(false) { Ogre::RenderWindow* window = mOgre.getWindow (); size_t windowHnd; @@ -315,10 +316,10 @@ namespace MWInput else mPlayer.setUpDown (0); - if(actionIsActive(A_Run)) - mPlayer.setRunState(true); + if (mAlwaysRunActive) + mPlayer.setRunState(!actionIsActive(A_Run)); else - mPlayer.setRunState(false); + mPlayer.setRunState(actionIsActive(A_Run)); // if player tried to start moving, but can't (due to being overencumbered), display a notification. if (triedToMove) @@ -699,7 +700,7 @@ namespace MWInput void InputManager::toggleWalking() { if (mWindows.isGuiMode()) return; - mPlayer.toggleRunning(); + mAlwaysRunActive = !mAlwaysRunActive; } // Exit program now button (which is disabled in GUI mode) diff --git a/apps/openmw/mwinput/inputmanagerimp.hpp b/apps/openmw/mwinput/inputmanagerimp.hpp index 34c8327566..e181fb351d 100644 --- a/apps/openmw/mwinput/inputmanagerimp.hpp +++ b/apps/openmw/mwinput/inputmanagerimp.hpp @@ -152,6 +152,7 @@ namespace MWInput int mMouseWheel; bool mDebug; bool mUserFileExists; + bool mAlwaysRunActive; std::map mControlSwitch; diff --git a/apps/openmw/mwworld/class.cpp b/apps/openmw/mwworld/class.cpp index 2bc4941a26..71b24b65dc 100644 --- a/apps/openmw/mwworld/class.cpp +++ b/apps/openmw/mwworld/class.cpp @@ -117,11 +117,6 @@ namespace MWWorld return false; } - bool Class::getForceStance (const Ptr& ptr, Stance stance) const - { - return false; - } - float Class::getSpeed (const Ptr& ptr) const { return 0; diff --git a/apps/openmw/mwworld/class.hpp b/apps/openmw/mwworld/class.hpp index d36e3bc584..1a6a16ca07 100644 --- a/apps/openmw/mwworld/class.hpp +++ b/apps/openmw/mwworld/class.hpp @@ -131,9 +131,6 @@ namespace MWWorld virtual void setForceStance (const Ptr& ptr, Stance stance, bool force) const; ///< Force or unforce a stance. - virtual bool getForceStance (const Ptr& ptr, Stance stance) const; - ///< Check if a stance forced. - virtual void setStance (const Ptr& ptr, Stance stance, bool set) const; ///< Set or unset a stance. diff --git a/apps/openmw/mwworld/player.cpp b/apps/openmw/mwworld/player.cpp index 5407e3a684..0dc8b37eff 100644 --- a/apps/openmw/mwworld/player.cpp +++ b/apps/openmw/mwworld/player.cpp @@ -77,15 +77,6 @@ namespace MWWorld MWWorld::Class::get(ptr).setStance(ptr, MWWorld::Class::Run, run); } - void Player::toggleRunning() - { - MWWorld::Ptr ptr = getPlayer(); - - bool running = MWWorld::Class::get (ptr).getForceStance(ptr, MWWorld::Class::Run); - - MWWorld::Class::get (ptr).setForceStance(ptr, MWWorld::Class::Run, !running); - } - void Player::setSneak(bool sneak) { MWWorld::Ptr ptr = getPlayer(); diff --git a/apps/openmw/mwworld/player.hpp b/apps/openmw/mwworld/player.hpp index 5f2fc3a08b..d82d3fc329 100644 --- a/apps/openmw/mwworld/player.hpp +++ b/apps/openmw/mwworld/player.hpp @@ -66,7 +66,6 @@ namespace MWWorld void setUpDown(int value); void setRunState(bool run); - void toggleRunning(); void setSneak(bool sneak); }; } From b36295cbb3b87d45c78bcc8893da4eef25525d44 Mon Sep 17 00:00:00 2001 From: scrawl Date: Thu, 14 Mar 2013 21:10:22 +0100 Subject: [PATCH 3/3] Removed a leftover --- apps/openmw/mwclass/npc.cpp | 18 ------------------ apps/openmw/mwclass/npc.hpp | 3 --- 2 files changed, 21 deletions(-) diff --git a/apps/openmw/mwclass/npc.cpp b/apps/openmw/mwclass/npc.cpp index 77b53ff1d9..d4e5e5cd67 100644 --- a/apps/openmw/mwclass/npc.cpp +++ b/apps/openmw/mwclass/npc.cpp @@ -322,24 +322,6 @@ namespace MWClass return false; } - bool Npc::getForceStance(const MWWorld::Ptr& ptr, Stance stance) const - { - MWMechanics::NpcStats& stats = getNpcStats (ptr); - - switch (stance) - { - case Run: - return stats.getMovementFlag (MWMechanics::NpcStats::Flag_ForceRun); - case Sneak: - return stats.getMovementFlag (MWMechanics::NpcStats::Flag_ForceSneak); - - case Combat: - return false; - } - - return false; - } - float Npc::getSpeed(const MWWorld::Ptr& ptr) const { const MWBase::World *world = MWBase::Environment::get().getWorld(); diff --git a/apps/openmw/mwclass/npc.hpp b/apps/openmw/mwclass/npc.hpp index bd624bd373..51e93636d3 100644 --- a/apps/openmw/mwclass/npc.hpp +++ b/apps/openmw/mwclass/npc.hpp @@ -76,9 +76,6 @@ namespace MWClass virtual void setForceStance (const MWWorld::Ptr& ptr, Stance stance, bool force) const; ///< Force or unforce a stance. - virtual bool getForceStance (const MWWorld::Ptr& ptr, Stance stance) const; - ///< Check if a stance forced. - virtual void setStance (const MWWorld::Ptr& ptr, Stance stance, bool set) const; ///< Set or unset a stance.