Browse Source

Added mouse wheel input.

Lasse Öörni 15 years ago
parent
commit
92c4f706c1
4 changed files with 32 additions and 12 deletions
  1. 1 0
      Engine/Engine/RegisterInput.cpp
  2. 18 10
      Engine/Input/Input.cpp
  3. 6 2
      Engine/Input/Input.h
  4. 7 0
      Engine/Input/InputEvents.h

+ 1 - 0
Engine/Engine/RegisterInput.cpp

@@ -200,6 +200,7 @@ static void registerInput(asIScriptEngine* engine)
     engine->RegisterObjectMethod("Input", "bool getMouseButtonPress(int) const", asMETHOD(Input, getMouseButtonPress), asCALL_THISCALL);
     engine->RegisterObjectMethod("Input", "int getMouseMoveX() const", asMETHOD(Input, getMouseMoveX), asCALL_THISCALL);
     engine->RegisterObjectMethod("Input", "int getMouseMoveY() const", asMETHOD(Input, getMouseMoveY), asCALL_THISCALL);
+    engine->RegisterObjectMethod("Input", "int getMouseMoveWheel() const", asMETHOD(Input, getMouseMoveWheel), asCALL_THISCALL);
     engine->RegisterObjectMethod("Input", "bool getToggleFullscreen() const", asMETHOD(Input, getToggleFullscreen), asCALL_THISCALL);
     engine->RegisterObjectMethod("Input", "bool isActive() const", asMETHOD(Input, isActive), asCALL_THISCALL);
     engine->RegisterObjectMethod("Input", "bool isMinimized() const", asMETHOD(Input, isMinimized), asCALL_THISCALL);

+ 18 - 10
Engine/Input/Input.cpp

@@ -60,6 +60,7 @@ void Input::update()
     
     memset(mKeyPress, 0, sizeof(mKeyPress));
     mMouseButtonPress = 0;
+    mMouseMoveWheel = 0;
     mRenderer->messagePump();
     
     if (mActivated)
@@ -93,6 +94,7 @@ void Input::update()
     {
         mMouseMoveX = 0;
         mMouseMoveY = 0;
+        mMouseMoveWheel = 0;
     }
     
     if ((mMouseMoveX) || (mMouseMoveY))
@@ -105,6 +107,16 @@ void Input::update()
         eventData[P_BUTTONS] = mMouseButtonDown;
         sendEvent(EVENT_MOUSEMOVE, eventData);
     }
+    if (mMouseMoveWheel)
+    {
+        using namespace MouseWheel;
+        
+        VariantMap eventData;
+        eventData[P_WHEEL] = mMouseMoveWheel;
+        eventData[P_BUTTONS] = mMouseButtonDown;
+        sendEvent(EVENT_MOUSEWHEEL, eventData);
+    }
+    
 }
 
 void Input::setToggleFullscreen(bool enable)
@@ -138,16 +150,6 @@ bool Input::getMouseButtonPress(int button) const
     return (mMouseButtonPress & button) != 0;
 }
 
-int Input::getMouseMoveX() const
-{
-    return mMouseMoveX;
-}
-
-int Input::getMouseMoveY() const
-{
-    return mMouseMoveY;
-}
-
 void Input::handleWindowMessage(StringHash eventType, VariantMap& eventData)
 {
     using namespace WindowMessage;
@@ -193,6 +195,11 @@ void Input::handleWindowMessage(StringHash eventType, VariantMap& eventData)
         eventData[P_HANDLED] = true;
         break;
         
+    case WM_MOUSEWHEEL:
+        mMouseMoveWheel += (wParam >> 16);
+        eventData[P_HANDLED] = true;
+        break;
+        
     case WM_ACTIVATE:
         if (LOWORD(wParam) == WA_INACTIVE)
         {
@@ -312,6 +319,7 @@ void Input::clearState()
 {
     mMouseMoveX = 0;
     mMouseMoveY = 0;
+    mMouseMoveWheel = 0;
     mMouseButtonDown = 0;
     mMouseButtonPress = 0;
     

+ 6 - 2
Engine/Input/Input.h

@@ -55,9 +55,11 @@ public:
     //! Check if a mouse button has been pressed on this frame
     bool getMouseButtonPress(int button) const;
     //! Return horizontal mouse movement since last frame
-    int getMouseMoveX() const;
+    int getMouseMoveX() const { return mMouseMoveX; }
     //! Return vertical mouse movement since last frame
-    int getMouseMoveY() const;
+    int getMouseMoveY() const { return mMouseMoveY; }
+    //! Return mouse wheel movement since last frame
+    int getMouseMoveWheel() const { return mMouseMoveWheel; }
     //! Return whether fullscreen toggle is enabled
     bool getToggleFullscreen() const { return mToggleFullscreen; }
     //! Return whether application window is active
@@ -93,6 +95,8 @@ private:
     int mMouseMoveX;
     //! Vertical mouse movement since last frame
     int mMouseMoveY;
+    //! Mouse wheel movement since last frame
+    int mMouseMoveWheel;
     //! Fullscreen toggle flag
     bool mToggleFullscreen;
     //! Active flag

+ 7 - 0
Engine/Input/InputEvents.h

@@ -48,6 +48,13 @@ DEFINE_EVENT(EVENT_MOUSEMOVE, MouseMove)
     EVENT_PARAM(P_BUTTONS, Buttons);            // int
 }
 
+//! Mouse wheel moved
+DEFINE_EVENT(EVENT_MOUSEWHEEL, MouseWheel)
+{
+    EVENT_PARAM(P_WHEEL, Wheel);                // int
+    EVENT_PARAM(P_BUTTONS, Buttons);            // int
+}
+
 //! Key pressed
 DEFINE_EVENT(EVENT_KEYDOWN, KeyDown)
 {