forked from bartvdbraak/blender
Mouse Wheel Support for the Game Engine.
This adds "Wheel Up" and "Wheel Down" as choices to the Mouse sensor brick.
This commit is contained in:
parent
45a240260e
commit
08c14c7ca0
@ -219,6 +219,8 @@ typedef struct bSensor {
|
||||
#define BL_SENS_MOUSE_LEFT_BUTTON 1
|
||||
#define BL_SENS_MOUSE_MIDDLE_BUTTON 2
|
||||
#define BL_SENS_MOUSE_RIGHT_BUTTON 4
|
||||
#define BL_SENS_MOUSE_WHEEL_UP 5
|
||||
#define BL_SENS_MOUSE_WHEEL_DOWN 6
|
||||
#define BL_SENS_MOUSE_MOVEMENT 8
|
||||
#define BL_SENS_MOUSE_MOUSEOVER 16
|
||||
|
||||
|
@ -1189,7 +1189,7 @@ static short draw_sensorbuttons(bSensor *sens, uiBlock *block, short xco, short
|
||||
/* Line 2: type selection. The number are a bit mangled to get
|
||||
* proper compatibility with older .blend files. */
|
||||
str= "Type %t|Left button %x1|Middle button %x2|"
|
||||
"Right button %x4|Movement %x8|Mouse over %x16";
|
||||
"Right button %x4|Wheel Up %x5|Wheel Down %x6|Movement %x8|Mouse over %x16";
|
||||
uiDefButS(block, MENU, B_REDR, str, xco+10, yco-44, width-20, 19,
|
||||
&ms->type, 0, 31, 0, 0,
|
||||
"Specify the type of event this mouse sensor should trigger on.");
|
||||
|
@ -59,11 +59,13 @@ public:
|
||||
|
||||
/* The reverse table. In order to not confuse ourselves, we */
|
||||
/* immediately convert all events that come in to KX codes. */
|
||||
m_reverseKeyTranslateTable[LEFTMOUSE ] = KX_LEFTMOUSE ;
|
||||
m_reverseKeyTranslateTable[MIDDLEMOUSE ] = KX_MIDDLEMOUSE ;
|
||||
m_reverseKeyTranslateTable[RIGHTMOUSE ] = KX_RIGHTMOUSE ;
|
||||
m_reverseKeyTranslateTable[MOUSEX ] = KX_MOUSEX ;
|
||||
m_reverseKeyTranslateTable[MOUSEY ] = KX_MOUSEY ;
|
||||
m_reverseKeyTranslateTable[LEFTMOUSE ] = KX_LEFTMOUSE ;
|
||||
m_reverseKeyTranslateTable[MIDDLEMOUSE ] = KX_MIDDLEMOUSE ;
|
||||
m_reverseKeyTranslateTable[RIGHTMOUSE ] = KX_RIGHTMOUSE ;
|
||||
m_reverseKeyTranslateTable[WHEELUPMOUSE ] = KX_WHEELUPMOUSE ;
|
||||
m_reverseKeyTranslateTable[WHEELDOWNMOUSE ] = KX_WHEELDOWNMOUSE ;
|
||||
m_reverseKeyTranslateTable[MOUSEX ] = KX_MOUSEX ;
|
||||
m_reverseKeyTranslateTable[MOUSEY ] = KX_MOUSEY ;
|
||||
|
||||
// TIMERS
|
||||
|
||||
|
@ -104,11 +104,13 @@ void BL_ConvertSensors(struct Object* blenderobject,
|
||||
|
||||
/* The reverse table. In order to not confuse ourselves, we */
|
||||
/* immediately convert all events that come in to KX codes. */
|
||||
gReverseKeyTranslateTable[LEFTMOUSE ] = SCA_IInputDevice::KX_LEFTMOUSE;
|
||||
gReverseKeyTranslateTable[MIDDLEMOUSE ] = SCA_IInputDevice::KX_MIDDLEMOUSE;
|
||||
gReverseKeyTranslateTable[RIGHTMOUSE ] = SCA_IInputDevice::KX_RIGHTMOUSE;
|
||||
gReverseKeyTranslateTable[MOUSEX ] = SCA_IInputDevice::KX_MOUSEX;
|
||||
gReverseKeyTranslateTable[MOUSEY ] = SCA_IInputDevice::KX_MOUSEY;
|
||||
gReverseKeyTranslateTable[LEFTMOUSE ] = SCA_IInputDevice::KX_LEFTMOUSE;
|
||||
gReverseKeyTranslateTable[MIDDLEMOUSE ] = SCA_IInputDevice::KX_MIDDLEMOUSE;
|
||||
gReverseKeyTranslateTable[RIGHTMOUSE ] = SCA_IInputDevice::KX_RIGHTMOUSE;
|
||||
gReverseKeyTranslateTable[WHEELUPMOUSE ] = SCA_IInputDevice::KX_WHEELUPMOUSE;
|
||||
gReverseKeyTranslateTable[WHEELDOWNMOUSE ] = SCA_IInputDevice::KX_WHEELDOWNMOUSE;
|
||||
gReverseKeyTranslateTable[MOUSEX ] = SCA_IInputDevice::KX_MOUSEX;
|
||||
gReverseKeyTranslateTable[MOUSEY ] = SCA_IInputDevice::KX_MOUSEY;
|
||||
|
||||
// TIMERS
|
||||
|
||||
@ -430,6 +432,12 @@ void BL_ConvertSensors(struct Object* blenderobject,
|
||||
case BL_SENS_MOUSE_RIGHT_BUTTON:
|
||||
keytype = SCA_MouseSensor::KX_MOUSESENSORMODE_RIGHTBUTTON;
|
||||
break;
|
||||
case BL_SENS_MOUSE_WHEEL_UP:
|
||||
keytype = SCA_MouseSensor::KX_MOUSESENSORMODE_WHEELUP;
|
||||
break;
|
||||
case BL_SENS_MOUSE_WHEEL_DOWN:
|
||||
keytype = SCA_MouseSensor::KX_MOUSESENSORMODE_WHEELDOWN;
|
||||
break;
|
||||
case BL_SENS_MOUSE_MOVEMENT:
|
||||
keytype = SCA_MouseSensor::KX_MOUSESENSORMODE_MOVEMENT;
|
||||
break;
|
||||
|
@ -248,6 +248,9 @@ public:
|
||||
KX_RIGHTMOUSE,
|
||||
|
||||
KX_ENDMOUSEBUTTONS,
|
||||
|
||||
KX_WHEELUPMOUSE,
|
||||
KX_WHEELDOWNMOUSE,
|
||||
|
||||
KX_MOUSEX,
|
||||
KX_MOUSEY,
|
||||
|
@ -73,6 +73,12 @@ SCA_MouseSensor::SCA_MouseSensor(SCA_MouseManager* eventmgr,
|
||||
case KX_MOUSESENSORMODE_RIGHTBUTTON:
|
||||
m_hotkey = SCA_IInputDevice::KX_RIGHTMOUSE;
|
||||
break;
|
||||
case KX_MOUSESENSORMODE_WHEELUP:
|
||||
m_hotkey = SCA_IInputDevice::KX_WHEELUPMOUSE;
|
||||
break;
|
||||
case KX_MOUSESENSORMODE_WHEELDOWN:
|
||||
m_hotkey = SCA_IInputDevice::KX_WHEELDOWNMOUSE;
|
||||
break;
|
||||
default:
|
||||
; /* ignore, no hotkey */
|
||||
}
|
||||
@ -141,6 +147,8 @@ bool SCA_MouseSensor::Evaluate(CValue* event)
|
||||
case KX_MOUSESENSORMODE_LEFTBUTTON:
|
||||
case KX_MOUSESENSORMODE_MIDDLEBUTTON:
|
||||
case KX_MOUSESENSORMODE_RIGHTBUTTON:
|
||||
case KX_MOUSESENSORMODE_WHEELUP:
|
||||
case KX_MOUSESENSORMODE_WHEELDOWN:
|
||||
{
|
||||
const SCA_InputEvent& event = mousedev->GetEventValue(m_hotkey);
|
||||
if (event.m_status == SCA_InputEvent::KX_JUSTACTIVATED)
|
||||
|
@ -79,6 +79,8 @@ class SCA_MouseSensor : public SCA_ISensor
|
||||
KX_MOUSESENSORMODE_LEFTBUTTON,
|
||||
KX_MOUSESENSORMODE_MIDDLEBUTTON,
|
||||
KX_MOUSESENSORMODE_RIGHTBUTTON,
|
||||
KX_MOUSESENSORMODE_WHEELUP,
|
||||
KX_MOUSESENSORMODE_WHEELDOWN,
|
||||
KX_MOUSESENSORMODE_POSITION,
|
||||
KX_MOUSESENSORMODE_POSITIONX,
|
||||
KX_MOUSESENSORMODE_POSITIONY,
|
||||
|
@ -107,6 +107,12 @@ bool GPC_MouseDevice::ConvertButtonEvent(TButtonId button, bool isDown)
|
||||
case buttonRight:
|
||||
result = ConvertEvent(KX_RIGHTMOUSE, isDown);
|
||||
break;
|
||||
case buttonWheelUp:
|
||||
result = ConvertEvent(KX_WHEELUPMOUSE, isDown);
|
||||
break;
|
||||
case buttonWheelDown:
|
||||
result = ConvertEvent(KX_WHEELDOWNMOUSE, isDown);
|
||||
break;
|
||||
default:
|
||||
// Should not happen!
|
||||
break;
|
||||
|
@ -53,7 +53,9 @@ public:
|
||||
typedef enum {
|
||||
buttonLeft,
|
||||
buttonMiddle,
|
||||
buttonRight
|
||||
buttonRight,
|
||||
buttonWheelUp,
|
||||
buttonWheelDown
|
||||
} TButtonId;
|
||||
|
||||
GPC_MouseDevice();
|
||||
|
@ -228,6 +228,10 @@ bool GPG_Application::processEvent(GHOST_IEvent* event)
|
||||
case GHOST_kEventButtonUp:
|
||||
handled = handleButton(event, false);
|
||||
break;
|
||||
|
||||
case GHOST_kEventWheel:
|
||||
handled = handleWheel(event);
|
||||
break;
|
||||
|
||||
case GHOST_kEventCursorMove:
|
||||
handled = handleCursorMove(event);
|
||||
@ -562,6 +566,24 @@ void GPG_Application::exitEngine()
|
||||
m_engineInitialized = false;
|
||||
}
|
||||
|
||||
bool GPG_Application::handleWheel(GHOST_IEvent* event)
|
||||
{
|
||||
bool handled = false;
|
||||
assert(event);
|
||||
if (m_mouse)
|
||||
{
|
||||
GHOST_TEventDataPtr eventData = ((GHOST_IEvent*)event)->getData();
|
||||
GHOST_TEventWheelData* wheelData = static_cast<GHOST_TEventWheelData*>(eventData);
|
||||
GPC_MouseDevice::TButtonId button;
|
||||
if (wheelData->z > 0)
|
||||
button = GPC_MouseDevice::buttonWheelUp;
|
||||
else
|
||||
button = GPC_MouseDevice::buttonWheelDown;
|
||||
m_mouse->ConvertButtonEvent(button, true);
|
||||
handled = true;
|
||||
}
|
||||
return handled;
|
||||
}
|
||||
|
||||
bool GPG_Application::handleButton(GHOST_IEvent* event, bool isDown)
|
||||
{
|
||||
|
@ -67,6 +67,7 @@ public:
|
||||
void StopGameEngine();
|
||||
|
||||
protected:
|
||||
bool handleWheel(GHOST_IEvent* event);
|
||||
bool handleButton(GHOST_IEvent* event, bool isDown);
|
||||
bool handleCursorMove(GHOST_IEvent* event);
|
||||
bool handleKey(GHOST_IEvent* event, bool isDown);
|
||||
|
Loading…
Reference in New Issue
Block a user