BGE: fix bug in mouse button release detection
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user