From 65cfea1be9f65af9f3c291f5e0ac85f4e9081c3d Mon Sep 17 00:00:00 2001 From: Chris Danford Date: Tue, 4 Oct 2005 01:40:58 +0000 Subject: [PATCH] Only accept repeating input from one player at a time. Fixes "wild scrolling" when 2 players are holding opposite directions. --- stepmania/src/ScreenSelectMaster.cpp | 22 ++++++++++++++++++---- stepmania/src/ScreenSelectMaster.h | 1 + 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/stepmania/src/ScreenSelectMaster.cpp b/stepmania/src/ScreenSelectMaster.cpp index 3f83066551..d5a8c1be7c 100644 --- a/stepmania/src/ScreenSelectMaster.cpp +++ b/stepmania/src/ScreenSelectMaster.cpp @@ -55,6 +55,8 @@ void ScreenSelectMaster::Init() { ScreenSelect::Init(); + m_TrackingRepeatingInputFromPlayer = PLAYER_INVALID; + vector vpns; if( SHARED_SELECTION ) { @@ -414,10 +416,13 @@ void ScreenSelectMaster::MenuLeft( const InputEventPlus &input ) return; if( input.type == IET_RELEASE ) return; - if( !ALLOW_REPEATING_INPUT && input.type != IET_FIRST_PRESS ) + if( input.type != IET_FIRST_PRESS && !ALLOW_REPEATING_INPUT ) + return; + if( input.type != IET_FIRST_PRESS && m_TrackingRepeatingInputFromPlayer != pn ) return; if( Move(pn, MENU_DIR_LEFT) ) { + m_TrackingRepeatingInputFromPlayer = pn; m_soundChange.Play(); MESSAGEMAN->Broadcast( (Message)(Message_MenuLeftP1+pn) ); } @@ -430,10 +435,13 @@ void ScreenSelectMaster::MenuRight( const InputEventPlus &input ) return; if( input.type == IET_RELEASE ) return; - if( !ALLOW_REPEATING_INPUT && input.type != IET_FIRST_PRESS ) + if( input.type != IET_FIRST_PRESS && !ALLOW_REPEATING_INPUT ) + return; + if( input.type != IET_FIRST_PRESS && m_TrackingRepeatingInputFromPlayer != pn ) return; if( Move(pn, MENU_DIR_RIGHT) ) { + m_TrackingRepeatingInputFromPlayer = pn; m_soundChange.Play(); MESSAGEMAN->Broadcast( (Message)(Message_MenuRightP1+pn) ); } @@ -446,10 +454,13 @@ void ScreenSelectMaster::MenuUp( const InputEventPlus &input ) return; if( input.type == IET_RELEASE ) return; - if( !ALLOW_REPEATING_INPUT && input.type != IET_FIRST_PRESS ) + if( input.type != IET_FIRST_PRESS && !ALLOW_REPEATING_INPUT ) + return; + if( input.type != IET_FIRST_PRESS && m_TrackingRepeatingInputFromPlayer != pn ) return; if( Move(pn, MENU_DIR_UP) ) { + m_TrackingRepeatingInputFromPlayer = pn; m_soundChange.Play(); MESSAGEMAN->Broadcast( (Message)(Message_MenuUpP1+pn) ); } @@ -462,10 +473,13 @@ void ScreenSelectMaster::MenuDown( const InputEventPlus &input ) return; if( input.type == IET_RELEASE ) return; - if( !ALLOW_REPEATING_INPUT && input.type != IET_FIRST_PRESS ) + if( input.type != IET_FIRST_PRESS && !ALLOW_REPEATING_INPUT ) + return; + if( input.type != IET_FIRST_PRESS && m_TrackingRepeatingInputFromPlayer != pn ) return; if( Move(pn, MENU_DIR_DOWN) ) { + m_TrackingRepeatingInputFromPlayer = pn; m_soundChange.Play(); MESSAGEMAN->Broadcast( (Message)(Message_MenuDownP1+pn) ); } diff --git a/stepmania/src/ScreenSelectMaster.h b/stepmania/src/ScreenSelectMaster.h index fe50c6f9d3..a8bfabeff9 100644 --- a/stepmania/src/ScreenSelectMaster.h +++ b/stepmania/src/ScreenSelectMaster.h @@ -92,6 +92,7 @@ protected: bool m_bChosen[NUM_PLAYERS]; float m_fLockInputSecs; + PlayerNumber m_TrackingRepeatingInputFromPlayer; };