From 2318886f7029cef4c0890d3ae9c56b86cc49d7ad Mon Sep 17 00:00:00 2001 From: Benoit Bolsee Date: Tue, 8 Dec 2009 08:46:07 +0000 Subject: BGE: fix bug in mouse button release detection --- .../BlenderRoutines/KX_BlenderMouseDevice.cpp | 46 +++++++++++++++------- 1 file changed, 32 insertions(+), 14 deletions(-) (limited to 'source/gameengine') diff --git a/source/gameengine/BlenderRoutines/KX_BlenderMouseDevice.cpp b/source/gameengine/BlenderRoutines/KX_BlenderMouseDevice.cpp index b2e965a35f6..2aae3557f0c 100644 --- a/source/gameengine/BlenderRoutines/KX_BlenderMouseDevice.cpp +++ b/source/gameengine/BlenderRoutines/KX_BlenderMouseDevice.cpp @@ -117,14 +117,12 @@ bool KX_BlenderMouseDevice::ConvertBlenderEvent(unsigned short incode,short val) // convert event KX_EnumInputs kxevent = this->ToNative(incode); + int previousTable = 1-m_currentTable; // only process it, if it's a key - if (kxevent > KX_BEGINMOUSE && kxevent < KX_ENDMOUSE) + if (kxevent > KX_BEGINMOUSE && kxevent < KX_ENDMOUSEBUTTONS) { - int previousTable = 1-m_currentTable; - - - if (val > 0) + if (val == KM_PRESS) { m_eventStatusTables[m_currentTable][kxevent].m_eventval = val ; //??? @@ -139,14 +137,7 @@ bool KX_BlenderMouseDevice::ConvertBlenderEvent(unsigned short incode,short val) } case SCA_InputEvent::KX_JUSTRELEASED: { - if ( kxevent > KX_BEGINMOUSEBUTTONS && kxevent < KX_ENDMOUSEBUTTONS) - { - m_eventStatusTables[m_currentTable][kxevent].m_status = SCA_InputEvent::KX_JUSTACTIVATED; - } else - { - m_eventStatusTables[m_currentTable][kxevent].m_status = SCA_InputEvent::KX_ACTIVE; - - } + m_eventStatusTables[m_currentTable][kxevent].m_status = SCA_InputEvent::KX_JUSTACTIVATED; break; } default: @@ -155,7 +146,7 @@ bool KX_BlenderMouseDevice::ConvertBlenderEvent(unsigned short incode,short val) } } - } else + } else if (val == KM_RELEASE) { // blender eventval == 0 switch (m_eventStatusTables[previousTable][kxevent].m_status) @@ -173,5 +164,32 @@ bool KX_BlenderMouseDevice::ConvertBlenderEvent(unsigned short incode,short val) } } } + + if (kxevent > KX_ENDMOUSEBUTTONS && kxevent < KX_ENDMOUSE) + { + m_eventStatusTables[m_currentTable][kxevent].m_eventval = val ; //remember mouse position + + switch (m_eventStatusTables[previousTable][kxevent].m_status) + { + + case SCA_InputEvent::KX_ACTIVE: + case SCA_InputEvent::KX_JUSTACTIVATED: + { + m_eventStatusTables[m_currentTable][kxevent].m_status = SCA_InputEvent::KX_ACTIVE; + break; + } + case SCA_InputEvent::KX_JUSTRELEASED: + { + m_eventStatusTables[m_currentTable][kxevent].m_status = SCA_InputEvent::KX_ACTIVE; + break; + } + default: + { + m_eventStatusTables[m_currentTable][kxevent].m_status = SCA_InputEvent::KX_JUSTACTIVATED; + } + } + } + + return result; } -- cgit v1.2.3