From b6954a4e8d251c7152ddc6278407f4d9c204fd18 Mon Sep 17 00:00:00 2001 From: greye Date: Fri, 17 Aug 2012 22:08:16 +0400 Subject: [PATCH 1/3] use the same height on non-1st person modes --- apps/openmw/mwrender/player.cpp | 32 +++++++++++++++++--------------- apps/openmw/mwrender/player.hpp | 5 ++--- 2 files changed, 19 insertions(+), 18 deletions(-) diff --git a/apps/openmw/mwrender/player.cpp b/apps/openmw/mwrender/player.cpp index 3bbb56907..98cb1695e 100644 --- a/apps/openmw/mwrender/player.cpp +++ b/apps/openmw/mwrender/player.cpp @@ -2,7 +2,6 @@ #include #include -#include #include "../mwbase/environment.hpp" #include "../mwbase/soundmanager.hpp" @@ -38,9 +37,6 @@ namespace MWRender bool Player::rotate(const Ogre::Vector3 &rot, bool adjust) { - mUpdates = 0; - mTimeIdle = 0.f; - if (mVanity.enabled) { toggleVanityMode(false); } @@ -120,13 +116,6 @@ namespace MWRender void Player::update(float duration) { Ogre::Vector3 pos = mPlayerNode->getPosition(); - if (!mVanity.enabled) { - ++mUpdates; - mTimeIdle += duration; - if (mTimeIdle > 30.f) { - toggleVanityMode(true); - } - } if (mAnimation) { mAnimation->runAnimation(duration); } @@ -145,10 +134,10 @@ namespace MWRender mFirstPersonView = !mFirstPersonView; if (mFirstPersonView) { mCamera->setPosition(0.f, 0.f, 0.f); - mCameraNode->setPosition(0.f, 0.f, 128.f); + setLowHeight(false); } else { mCamera->setPosition(0.f, 0.f, mCameraDistance); - mCameraNode->setPosition(0.f, 0.f, 104.f); + setLowHeight(true); } mPlayerNode->setVisible(!mFirstPersonView, false); } @@ -176,15 +165,17 @@ namespace MWRender float offset = mPreviewCam.offset; Ogre::Vector3 rot(0.f, 0.f, 0.f); if (mVanity.enabled) { - mPlayerNode->setVisible(true, false); rot.x = Ogre::Degree(-30.f).valueRadians(); mMainCam.offset = mCamera->getPosition().z; + mPlayerNode->setVisible(true, false); + setLowHeight(true); } else { rot.x = getPitch(); offset = mMainCam.offset; mPlayerNode->setVisible(!mFirstPersonView, false); + setLowHeight(!mFirstPersonView); } rot.z = getYaw(); mCamera->setPosition(0.f, 0.f, offset); @@ -201,15 +192,17 @@ namespace MWRender mPreviewMode = enable; float offset = mCamera->getPosition().z; if (mPreviewMode) { - mPlayerNode->setVisible(true, false); mMainCam.offset = offset; offset = mPreviewCam.offset; + mPlayerNode->setVisible(true, false); + setLowHeight(true); } else { mPreviewCam.offset = offset; offset = mMainCam.offset; mPlayerNode->setVisible(!mFirstPersonView, false); + setLowHeight(!mFirstPersonView); } mCamera->setPosition(0.f, 0.f, offset); rotateCamera(Ogre::Vector3(getPitch(), 0.f, getYaw()), false); @@ -357,4 +350,13 @@ namespace MWRender { mFreeLook = enable; } + + void Player::setLowHeight(bool low) + { + if (low) { + mCameraNode->setPosition(0.f, 0.f, mHeight * 0.85); + } else { + mCameraNode->setPosition(0.f, 0.f, mHeight); + } + } } diff --git a/apps/openmw/mwrender/player.hpp b/apps/openmw/mwrender/player.hpp index 5bc32fffe..8dd313b7f 100644 --- a/apps/openmw/mwrender/player.hpp +++ b/apps/openmw/mwrender/player.hpp @@ -45,9 +45,6 @@ namespace MWRender bool mDistanceAdjusted; - float mTimeIdle; - int mUpdates; - /// Updates sound manager listener data void updateListener(); @@ -61,6 +58,8 @@ namespace MWRender void compensateYaw(float diff); + void setLowHeight(bool low = true); + public: Player (Ogre::Camera *camera, Ogre::SceneNode* mNode); From d2b451eb7d7d9374f36c160e043776808205d2c0 Mon Sep 17 00:00:00 2001 From: greye Date: Fri, 17 Aug 2012 23:25:29 +0400 Subject: [PATCH 2/3] entering vanity mode --- apps/openmw/mwbase/inputmanager.hpp | 2 + apps/openmw/mwinput/inputmanagerimp.cpp | 59 +++++++++++++++++++++---- apps/openmw/mwinput/inputmanagerimp.hpp | 3 +- apps/openmw/mwinput/mouselookevent.cpp | 2 + 4 files changed, 57 insertions(+), 9 deletions(-) diff --git a/apps/openmw/mwbase/inputmanager.hpp b/apps/openmw/mwbase/inputmanager.hpp index fdbab9fac..00d7c8125 100644 --- a/apps/openmw/mwbase/inputmanager.hpp +++ b/apps/openmw/mwbase/inputmanager.hpp @@ -31,6 +31,8 @@ namespace MWBase virtual void setDragDrop(bool dragDrop) = 0; virtual void toggleControlSwitch (const std::string& sw, bool value) = 0; + + virtual void resetIdleTime() = 0; }; } diff --git a/apps/openmw/mwinput/inputmanagerimp.cpp b/apps/openmw/mwinput/inputmanagerimp.cpp index 0945842b2..c78643f59 100644 --- a/apps/openmw/mwinput/inputmanagerimp.cpp +++ b/apps/openmw/mwinput/inputmanagerimp.cpp @@ -92,6 +92,7 @@ namespace MWInput std::map mControlSwitch; float mPreviewPOVDelay; + float mTimeIdle; /* InputImpl Methods */ public: @@ -99,11 +100,34 @@ public: { input.adjustMouseClippingSize(width, height); } + + void resetIdleTime() + { + if (mTimeIdle < 0) { + MWBase::Environment::get().getWorld()->toggleVanityMode(false, false); + } + mTimeIdle = 0.f; + } + private: + + void updateIdleTime(float dt) + { + if (mTimeIdle >= 0.f) { + mTimeIdle += dt; + } + if (mTimeIdle > 30.f) { + MWBase::Environment::get().getWorld()->toggleVanityMode(true, false); + mTimeIdle = -1.f; + } + } + void toggleSpell() { if (windows.isGuiMode()) return; + resetIdleTime(); + MWMechanics::DrawState_ state = player.getDrawState(); if (state == MWMechanics::DrawState_Weapon || state == MWMechanics::DrawState_Nothing) { @@ -121,6 +145,8 @@ private: { if (windows.isGuiMode()) return; + resetIdleTime(); + MWMechanics::DrawState_ state = player.getDrawState(); if (state == MWMechanics::DrawState_Spell || state == MWMechanics::DrawState_Nothing) { @@ -200,18 +226,26 @@ private: void activate() { + resetIdleTime(); + mEngine.activate(); } void toggleAutoMove() { if (windows.isGuiMode()) return; + + resetIdleTime(); + player.setAutoMove (!player.getAutoMove()); } void toggleWalking() { if (windows.isGuiMode()) return; + + resetIdleTime(); + player.toggleRunning(); } @@ -243,7 +277,8 @@ private: windows(_windows), mEngine (engine), mDragDrop(false), - mPreviewPOVDelay(0.f) + mPreviewPOVDelay(0.f), + mTimeIdle(0.f) { using namespace OEngine::Input; using namespace OEngine::Render; @@ -426,6 +461,19 @@ private: } } } + // Idle time update despite of control switches + if (poller.isDown(A_MoveLeft) || + poller.isDown(A_MoveRight) || + poller.isDown(A_MoveForward) || + poller.isDown(A_MoveBackward) || + poller.isDown(A_Jump) || + poller.isDown(A_Crouch) || + poller.isDown(A_TogglePOV)) + { + resetIdleTime(); + } else { + updateIdleTime(duration); + } } // Switch between gui modes. Besides controlling the Gui windows @@ -472,11 +520,6 @@ private: mControlSwitch[sw] = value; } - bool getControlSwitch(const std::string &sw) - { - return mControlSwitch[sw]; - } - void togglePOV() { MWBase::Environment::get().getWorld()->togglePOV(); @@ -536,8 +579,8 @@ private: impl->toggleControlSwitch(sw, value); } - bool MWInputManager::getControlSwitch(const std::string &sw) + void MWInputManager::resetIdleTime() { - return impl->getControlSwitch(sw); + impl->resetIdleTime(); } } diff --git a/apps/openmw/mwinput/inputmanagerimp.hpp b/apps/openmw/mwinput/inputmanagerimp.hpp index d4ca32d2f..868565dbb 100644 --- a/apps/openmw/mwinput/inputmanagerimp.hpp +++ b/apps/openmw/mwinput/inputmanagerimp.hpp @@ -61,7 +61,8 @@ namespace MWInput virtual void setDragDrop(bool dragDrop); void toggleControlSwitch(const std::string &sw, bool value); - bool getControlSwitch(const std::string &sw); + + void resetIdleTime(); }; } #endif diff --git a/apps/openmw/mwinput/mouselookevent.cpp b/apps/openmw/mwinput/mouselookevent.cpp index f318ce666..e6852d923 100644 --- a/apps/openmw/mwinput/mouselookevent.cpp +++ b/apps/openmw/mwinput/mouselookevent.cpp @@ -1,6 +1,7 @@ #include "mouselookevent.hpp" #include "../mwbase/environment.hpp" +#include "../mwbase/inputmanager.hpp" #include "../mwbase/world.hpp" #include "../mwworld/player.hpp" @@ -17,6 +18,7 @@ void MouseLookEvent::event(Type type, int index, const void *p) if (type != EV_MouseMove || mDisabled) { return; } + MWBase::Environment::get().getInputManager()->resetIdleTime(); MouseEvent *arg = (MouseEvent*)(p); From 3f3972eb3b0e73417de662245a07315b2dc18c19 Mon Sep 17 00:00:00 2001 From: greye Date: Fri, 17 Aug 2012 23:44:28 +0400 Subject: [PATCH 3/3] no vanity in gui mode (thanks scrawl) --- apps/openmw/mwinput/inputmanagerimp.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/openmw/mwinput/inputmanagerimp.cpp b/apps/openmw/mwinput/inputmanagerimp.cpp index c78643f59..638bc6047 100644 --- a/apps/openmw/mwinput/inputmanagerimp.cpp +++ b/apps/openmw/mwinput/inputmanagerimp.cpp @@ -116,7 +116,7 @@ private: if (mTimeIdle >= 0.f) { mTimeIdle += dt; } - if (mTimeIdle > 30.f) { + if (mTimeIdle > 30.f && !windows.isGuiMode()) { MWBase::Environment::get().getWorld()->toggleVanityMode(true, false); mTimeIdle = -1.f; }