From 130261aeed83755b0d4dcc8752a48f42e0ee85dc Mon Sep 17 00:00:00 2001 From: Marisa the Magician Date: Tue, 9 Aug 2022 01:20:17 +0200 Subject: [PATCH] Fix glitchy mouse input in Wallbuster menu. --- language.version | 4 +- zscript/weapons/swwm_cbt_ui.zsc | 124 +++++++++++++++----------------- 2 files changed, 60 insertions(+), 68 deletions(-) diff --git a/language.version b/language.version index 5afe488c8..f2c6f9b8f 100644 --- a/language.version +++ b/language.version @@ -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-"; diff --git a/zscript/weapons/swwm_cbt_ui.zsc b/zscript/weapons/swwm_cbt_ui.zsc index ba828f288..9e0212ffc 100644 --- a/zscript/weapons/swwm_cbt_ui.zsc +++ b/zscript/weapons/swwm_cbt_ui.zsc @@ -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;