From ae637d6abc712b84248330f5634182a96902757f Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Fri, 28 Feb 2014 11:58:03 +0100 Subject: [PATCH] rolling --- apps/opencs/view/render/navigation.hpp | 3 +++ apps/opencs/view/render/navigation1st.cpp | 6 ++++++ apps/opencs/view/render/navigation1st.hpp | 3 +++ apps/opencs/view/render/navigationfree.cpp | 6 ++++++ apps/opencs/view/render/navigationfree.hpp | 3 +++ apps/opencs/view/render/scenewidget.cpp | 17 +++++++++++++++++ apps/opencs/view/render/scenewidget.hpp | 10 ++++++---- 7 files changed, 44 insertions(+), 4 deletions(-) diff --git a/apps/opencs/view/render/navigation.hpp b/apps/opencs/view/render/navigation.hpp index 964ceeac6e..8735196095 100644 --- a/apps/opencs/view/render/navigation.hpp +++ b/apps/opencs/view/render/navigation.hpp @@ -37,6 +37,9 @@ namespace CSVRender virtual bool handleMovementKeys (int vertical, int horizontal) = 0; ///< \return Update required? + + virtual bool handleRollKeys (int delta) = 0; + ///< \return Update required? }; } diff --git a/apps/opencs/view/render/navigation1st.cpp b/apps/opencs/view/render/navigation1st.cpp index 5a3bc7b652..b177c019b4 100644 --- a/apps/opencs/view/render/navigation1st.cpp +++ b/apps/opencs/view/render/navigation1st.cpp @@ -58,3 +58,9 @@ bool CSVRender::Navigation1st::handleMovementKeys (int vertical, int horizontal) return true; } + +bool CSVRender::Navigation1st::handleRollKeys (int delta) +{ + // we don't roll this way in 1st person mode + return false; +} diff --git a/apps/opencs/view/render/navigation1st.hpp b/apps/opencs/view/render/navigation1st.hpp index 815e0b1174..d1e09d2367 100644 --- a/apps/opencs/view/render/navigation1st.hpp +++ b/apps/opencs/view/render/navigation1st.hpp @@ -26,6 +26,9 @@ namespace CSVRender virtual bool handleMovementKeys (int vertical, int horizontal); ///< \return Update required? + + virtual bool handleRollKeys (int delta); + ///< \return Update required? }; } diff --git a/apps/opencs/view/render/navigationfree.cpp b/apps/opencs/view/render/navigationfree.cpp index d470722bb8..950e137a7d 100644 --- a/apps/opencs/view/render/navigationfree.cpp +++ b/apps/opencs/view/render/navigationfree.cpp @@ -58,3 +58,9 @@ bool CSVRender::NavigationFree::handleMovementKeys (int vertical, int horizontal return true; } + +bool CSVRender::NavigationFree::handleRollKeys (int delta) +{ + mCamera->roll (Ogre::Degree (getFactor (false) * delta)); + return true; +} diff --git a/apps/opencs/view/render/navigationfree.hpp b/apps/opencs/view/render/navigationfree.hpp index fa6fdad11b..e30722f75d 100644 --- a/apps/opencs/view/render/navigationfree.hpp +++ b/apps/opencs/view/render/navigationfree.hpp @@ -26,6 +26,9 @@ namespace CSVRender virtual bool handleMovementKeys (int vertical, int horizontal); ///< \return Update required? + + virtual bool handleRollKeys (int delta); + ///< \return Update required? }; } diff --git a/apps/opencs/view/render/scenewidget.cpp b/apps/opencs/view/render/scenewidget.cpp index 41868dfb5b..f864e15280 100644 --- a/apps/opencs/view/render/scenewidget.cpp +++ b/apps/opencs/view/render/scenewidget.cpp @@ -19,6 +19,7 @@ namespace CSVRender , mCamera(NULL) , mSceneMgr(NULL), mNavigation (0), mUpdate (false) , mKeyForward (false), mKeyBackward (false), mKeyLeft (false), mKeyRight (false) + , mKeyRollLeft (false), mKeyRollRight (false) , mFast (false), mDragging (false), mMod1 (false) , mFastFactor (4) /// \todo make this configurable { @@ -158,6 +159,8 @@ namespace CSVRender case Qt::Key_S: mKeyBackward = true; break; case Qt::Key_A: mKeyLeft = true; break; case Qt::Key_D: mKeyRight = true; break; + case Qt::Key_Q: mKeyRollLeft = true; break; + case Qt::Key_E: mKeyRollRight = true; break; case Qt::Key_Control: mMod1 = true; break; case Qt::Key_Shift: @@ -181,6 +184,8 @@ namespace CSVRender case Qt::Key_S: mKeyBackward = false; break; case Qt::Key_A: mKeyLeft = false; break; case Qt::Key_D: mKeyRight = false; break; + case Qt::Key_Q: mKeyRollLeft = false; break; + case Qt::Key_E: mKeyRollRight = false; break; case Qt::Key_Control: mMod1 = false; break; case Qt::Key_Shift: @@ -268,6 +273,18 @@ namespace CSVRender if (horizontal || vertical) if (mNavigation->handleMovementKeys (vertical, horizontal)) mUpdate = true; + + int roll = 0; + + if (mKeyRollLeft && !mKeyRollRight) + roll = 1; + else if (!mKeyRollLeft && mKeyRollRight) + roll = -1; + + if (roll) + if (mNavigation->handleRollKeys (roll)) + mUpdate = true; + } if (mUpdate) diff --git a/apps/opencs/view/render/scenewidget.hpp b/apps/opencs/view/render/scenewidget.hpp index 247dbbb1a1..4a18c42443 100644 --- a/apps/opencs/view/render/scenewidget.hpp +++ b/apps/opencs/view/render/scenewidget.hpp @@ -57,10 +57,12 @@ namespace CSVRender Navigation *mNavigation; bool mUpdate; - int mKeyForward; - int mKeyBackward; - int mKeyLeft; - int mKeyRight; + bool mKeyForward; + bool mKeyBackward; + bool mKeyLeft; + bool mKeyRight; + bool mKeyRollLeft; + bool mKeyRollRight; bool mFast; bool mDragging; bool mMod1;