Fix glitchy mouse input in Wallbuster menu.

This commit is contained in:
Mari the Deer 2022-08-09 01:20:17 +02:00
commit 130261aeed
2 changed files with 59 additions and 67 deletions

View file

@ -1,3 +1,3 @@
[default]
SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r281 \cu(Tue 9 Aug 00:53:32 CEST 2022)\c-";
SWWM_SHORTVER="\cw1.3pre r281 \cu(2022-08-09 00:53:32)\c-";
SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r282 \cu(Tue 9 Aug 01:20:17 CEST 2022)\c-";
SWWM_SHORTVER="\cw1.3pre r282 \cu(2022-08-09 01:20:17)\c-";

View file

@ -213,50 +213,53 @@ Class WallbusterReloadMenu : GenericMenu
override bool MouseEvent( int type, int mx, int my )
{
bool res = Super.MouseEvent(type,mx,my);
if ( (type != MOUSE_CLICK) && (type != MOUSE_RELEASE) ) return false;
Vector2 mpos = (mx/hs,my/hs)-origin;
if ( type == MOUSE_Click )
int wset = -1;
int ox = 6;
for ( int i=0; i<4; i++ )
{
int wset = -1;
int ox = 6;
for ( int i=0; i<4; i++ )
if ( (mpos.x >= ox) && (mpos.x < ox+27) && (mpos.y >= 0) && (mpos.y < 13) )
{
if ( (mpos.x >= ox) && (mpos.x < ox+27) && (mpos.y >= 0) && (mpos.y < 13) )
{
wset = i;
break;
}
ox += 27;
}
if ( wset != -1 ) sel0 = wset;
bool inside = (wset!=-1);
if ( (mpos.x >= 0) && (mpos.x < 120) && (mpos.y >= 15) && (mpos.y < 28) ) inside = true;
if ( isrclick )
{
// right click inside: pop
// right click outside: clear (empty if already clear)
if ( inside || multiclk ) MenuEvent(multiclk?MKEY_PAGEUP:MKEY_UP,false);
else
{
if ( queue.Size() == 0 )
{
for ( int i=0; i<4; i++ ) AmmoSets[i] = 0;
MenuSound("menu/democlose");
EventHandler.SendNetworkEvent("swwmcbt.EMPTY",consoleplayer);
Close();
}
else MenuEvent(MKEY_CLEAR,false);
}
wset = i;
break;
}
ox += 27;
}
if ( (wset != -1) && (type == MOUSE_CLICK) && (wset != sel0) )
{
MenuSound("menu/demotab");
sel0 = wset;
CVar.FindCVar('swwm_cbtlast').SetInt(sel0);
}
bool inside = (wset!=-1);
if ( type != MOUSE_RELEASE ) return false;
if ( (mpos.x >= 0) && (mpos.x < 120) && (mpos.y >= 15) && (mpos.y < 28) ) inside = true;
if ( isrclick )
{
// right click inside: pop
// right click outside: clear (empty if already clear)
if ( inside || multiclk ) MenuEvent(multiclk?MKEY_PAGEUP:MKEY_UP,false);
else
{
// left click inside: push
// left click outside: commit
if ( inside || multiclk ) MenuEvent(multiclk?MKEY_PAGEDOWN:MKEY_DOWN,false);
else MenuEvent(MKEY_ENTER,false);
if ( queue.Size() == 0 )
{
for ( int i=0; i<4; i++ ) AmmoSets[i] = 0;
MenuSound("menu/democlose");
EventHandler.SendNetworkEvent("swwmcbt.EMPTY",consoleplayer);
Close();
}
else MenuEvent(MKEY_CLEAR,false);
}
}
return res;
else
{
// left click inside: push
// left click outside: commit
if ( inside || multiclk ) MenuEvent(multiclk?MKEY_PAGEDOWN:MKEY_DOWN,false);
else MenuEvent(MKEY_ENTER,false);
}
return false;
}
override bool OnInputEvent( InputEvent ev )
@ -289,55 +292,44 @@ Class WallbusterReloadMenu : GenericMenu
MenuSound("menu/democlose");
EventHandler.SendNetworkEvent("swwmcbt.EMPTY",consoleplayer);
Close();
return true;
}
break;
case UIEvent.Type_LButtonDown:
{
isrclick = false;
multiclk = false;
bool res = MouseEvent(MOUSE_Click,ev.MouseX,ev.MouseY);
if ( res ) SetCapture(true);
return res;
}
MouseEvent(MOUSE_Click,ev.MouseX,ev.MouseY);
break;
case UIEvent.Type_LButtonUp:
isrclick = false;
multiclk = false;
MouseEvent(MOUSE_Release,ev.MouseX,ev.MouseY);
break;
case UIEvent.Type_RButtonDown:
{
isrclick = true;
multiclk = false;
bool res = MouseEvent(MOUSE_Click,ev.MouseX,ev.MouseY);
if ( res ) SetCapture(true);
return res;
}
MouseEvent(MOUSE_Click,ev.MouseX,ev.MouseY);
break;
case UIEvent.Type_RButtonUp:
isrclick = true;
multiclk = false;
MouseEvent(MOUSE_Release,ev.MouseX,ev.MouseY);
break;
case UIEvent.Type_WheelDown:
{
// wheel down: push 5
isrclick = false;
multiclk = true;
bool res = MouseEvent(MOUSE_Click,int(curmouse.x),int(curmouse.y));
SetCapture(false);
return res;
}
MouseEvent(MOUSE_Click,int(curmouse.x),int(curmouse.y));
MouseEvent(MOUSE_Release,int(curmouse.x),int(curmouse.y));
break;
case UIEvent.Type_WheelUp:
{
// wheel up: pop 5
isrclick = true;
multiclk = true;
bool res = MouseEvent(MOUSE_Click,int(curmouse.x),int(curmouse.y));
SetCapture(false);
return res;
}
case UIEvent.Type_LButtonUp:
case UIEvent.Type_RButtonUp:
if ( mMouseCapture )
{
SetCapture(false);
return MouseEvent(MOUSE_Release,ev.MouseX,ev.MouseY);
}
MouseEvent(MOUSE_Click,int(curmouse.x),int(curmouse.y));
MouseEvent(MOUSE_Release,int(curmouse.x),int(curmouse.y));
break;
case UIEvent.Type_MouseMove:
curmouse = (ev.MouseX,ev.MouseY);
if ( mMouseCapture || (m_use_mouse == 1) )
return MouseEvent(MOUSE_Move,ev.MouseX,ev.MouseY);
break;
}
return false;