BGE: fix bug in mouse button release detection

This commit is contained in:
2009-12-08 08:46:07 +00:00
parent 915f352400
commit 2318886f70

View File

@@ -117,14 +117,12 @@ bool KX_BlenderMouseDevice::ConvertBlenderEvent(unsigned short incode,short val)
// convert event // convert event
KX_EnumInputs kxevent = this->ToNative(incode); KX_EnumInputs kxevent = this->ToNative(incode);
int previousTable = 1-m_currentTable;
// only process it, if it's a key // 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 == KM_PRESS)
if (val > 0)
{ {
m_eventStatusTables[m_currentTable][kxevent].m_eventval = val ; //??? 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: case SCA_InputEvent::KX_JUSTRELEASED:
{ {
if ( kxevent > KX_BEGINMOUSEBUTTONS && kxevent < KX_ENDMOUSEBUTTONS) m_eventStatusTables[m_currentTable][kxevent].m_status = SCA_InputEvent::KX_JUSTACTIVATED;
{
m_eventStatusTables[m_currentTable][kxevent].m_status = SCA_InputEvent::KX_JUSTACTIVATED;
} else
{
m_eventStatusTables[m_currentTable][kxevent].m_status = SCA_InputEvent::KX_ACTIVE;
}
break; break;
} }
default: default:
@@ -155,7 +146,7 @@ bool KX_BlenderMouseDevice::ConvertBlenderEvent(unsigned short incode,short val)
} }
} }
} else } else if (val == KM_RELEASE)
{ {
// blender eventval == 0 // blender eventval == 0
switch (m_eventStatusTables[previousTable][kxevent].m_status) 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; return result;
} }