From d7e96016dbb920eb5fa6d7219d8b04c1c607711b Mon Sep 17 00:00:00 2001 From: Chris Danford Date: Tue, 4 Oct 2005 02:09:06 +0000 Subject: [PATCH] fix jumpy scrolling if one player holds 2 directions --- stepmania/src/MenuInput.h | 3 +- stepmania/src/ScreenSelectMaster.cpp | 54 +++++++++++++++++----------- stepmania/src/ScreenSelectMaster.h | 3 +- 3 files changed, 37 insertions(+), 23 deletions(-) diff --git a/stepmania/src/MenuInput.h b/stepmania/src/MenuInput.h index f9208a0bd9..e44e7eadbe 100644 --- a/stepmania/src/MenuInput.h +++ b/stepmania/src/MenuInput.h @@ -29,7 +29,8 @@ struct MenuInput PlayerNumber player; MenuButton button; -// bool operator==( const MenuInput &other ) { return player == other.player && button == other.button; }; + bool operator==( const MenuInput &other ) { return player == other.player && button == other.button; }; + bool operator!=( const MenuInput &other ) { return !operator==(other); }; inline bool IsValid() const { return player != PLAYER_INVALID; }; inline void MakeInvalid() { player = PLAYER_INVALID; button = MENU_BUTTON_INVALID; }; diff --git a/stepmania/src/ScreenSelectMaster.cpp b/stepmania/src/ScreenSelectMaster.cpp index d5a8c1be7c..0abcc05d65 100644 --- a/stepmania/src/ScreenSelectMaster.cpp +++ b/stepmania/src/ScreenSelectMaster.cpp @@ -55,7 +55,7 @@ void ScreenSelectMaster::Init() { ScreenSelect::Init(); - m_TrackingRepeatingInputFromPlayer = PLAYER_INVALID; + m_TrackingRepeatingInput.MakeInvalid(); vector vpns; if( SHARED_SELECTION ) @@ -416,13 +416,16 @@ void ScreenSelectMaster::MenuLeft( const InputEventPlus &input ) return; if( input.type == IET_RELEASE ) return; - if( input.type != IET_FIRST_PRESS && !ALLOW_REPEATING_INPUT ) - return; - if( input.type != IET_FIRST_PRESS && m_TrackingRepeatingInputFromPlayer != pn ) - return; + if( input.type != IET_FIRST_PRESS ) + { + if( !ALLOW_REPEATING_INPUT ) + return; + if( m_TrackingRepeatingInput != input.MenuI ) + return; + } if( Move(pn, MENU_DIR_LEFT) ) { - m_TrackingRepeatingInputFromPlayer = pn; + m_TrackingRepeatingInput = input.MenuI; m_soundChange.Play(); MESSAGEMAN->Broadcast( (Message)(Message_MenuLeftP1+pn) ); } @@ -435,13 +438,16 @@ void ScreenSelectMaster::MenuRight( const InputEventPlus &input ) return; if( input.type == IET_RELEASE ) return; - if( input.type != IET_FIRST_PRESS && !ALLOW_REPEATING_INPUT ) - return; - if( input.type != IET_FIRST_PRESS && m_TrackingRepeatingInputFromPlayer != pn ) - return; + if( input.type != IET_FIRST_PRESS ) + { + if( !ALLOW_REPEATING_INPUT ) + return; + if( m_TrackingRepeatingInput != input.MenuI ) + return; + } if( Move(pn, MENU_DIR_RIGHT) ) { - m_TrackingRepeatingInputFromPlayer = pn; + m_TrackingRepeatingInput = input.MenuI; m_soundChange.Play(); MESSAGEMAN->Broadcast( (Message)(Message_MenuRightP1+pn) ); } @@ -454,13 +460,16 @@ void ScreenSelectMaster::MenuUp( const InputEventPlus &input ) return; if( input.type == IET_RELEASE ) return; - if( input.type != IET_FIRST_PRESS && !ALLOW_REPEATING_INPUT ) - return; - if( input.type != IET_FIRST_PRESS && m_TrackingRepeatingInputFromPlayer != pn ) - return; + if( input.type != IET_FIRST_PRESS ) + { + if( !ALLOW_REPEATING_INPUT ) + return; + if( m_TrackingRepeatingInput != input.MenuI ) + return; + } if( Move(pn, MENU_DIR_UP) ) { - m_TrackingRepeatingInputFromPlayer = pn; + m_TrackingRepeatingInput = input.MenuI; m_soundChange.Play(); MESSAGEMAN->Broadcast( (Message)(Message_MenuUpP1+pn) ); } @@ -473,13 +482,16 @@ void ScreenSelectMaster::MenuDown( const InputEventPlus &input ) return; if( input.type == IET_RELEASE ) return; - if( input.type != IET_FIRST_PRESS && !ALLOW_REPEATING_INPUT ) - return; - if( input.type != IET_FIRST_PRESS && m_TrackingRepeatingInputFromPlayer != pn ) - return; + if( input.type != IET_FIRST_PRESS ) + { + if( !ALLOW_REPEATING_INPUT ) + return; + if( m_TrackingRepeatingInput != input.MenuI ) + return; + } if( Move(pn, MENU_DIR_DOWN) ) { - m_TrackingRepeatingInputFromPlayer = pn; + m_TrackingRepeatingInput = input.MenuI; m_soundChange.Play(); MESSAGEMAN->Broadcast( (Message)(Message_MenuDownP1+pn) ); } diff --git a/stepmania/src/ScreenSelectMaster.h b/stepmania/src/ScreenSelectMaster.h index a8bfabeff9..5cf3d91720 100644 --- a/stepmania/src/ScreenSelectMaster.h +++ b/stepmania/src/ScreenSelectMaster.h @@ -6,6 +6,7 @@ #include "RandomSample.h" #include "ActorUtil.h" #include "ActorScroller.h" +#include "MenuInput.h" #define MAX_CHOICES 30 @@ -92,7 +93,7 @@ protected: bool m_bChosen[NUM_PLAYERS]; float m_fLockInputSecs; - PlayerNumber m_TrackingRepeatingInputFromPlayer; + MenuInput m_TrackingRepeatingInput; };