From 699dcc36a1ccbc8f7cedebf661f43c7049d35a92 Mon Sep 17 00:00:00 2001 From: Chris Danford Date: Mon, 23 Feb 2004 08:33:54 +0000 Subject: [PATCH] on SPO, ignore MenuStart repeats until we get one FirstPressed --- stepmania/src/ScreenOptions.cpp | 15 +++++++++++++-- stepmania/src/ScreenOptions.h | 5 +++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/stepmania/src/ScreenOptions.cpp b/stepmania/src/ScreenOptions.cpp index 7c3a5cd397..1798987d72 100644 --- a/stepmania/src/ScreenOptions.cpp +++ b/stepmania/src/ScreenOptions.cpp @@ -115,6 +115,7 @@ ScreenOptions::ScreenOptions( CString sClassName ) : Screen(sClassName) { m_iCurrentRow[p] = 0; m_bWasOnExit[p] = false; + m_bGotAtLeastOneStartPressed[p] = false; } m_framePage.Command( FRAME_ON_COMMAND ); @@ -1091,8 +1092,18 @@ void ScreenOptions::StartGoToNextState() void ScreenOptions::MenuStart( PlayerNumber pn, const InputEventType type ) { - if( type == IET_RELEASE ) - return; + switch( type ) + { + case IET_FIRST_PRESS: + m_bGotAtLeastOneStartPressed[pn] = true; + break; + case IET_RELEASE: + return; // ignore + default: // repeat type + if( !m_bGotAtLeastOneStartPressed[pn] ) + return; // don't allow repeat + break; + } Row &row = *m_Rows[m_iCurrentRow[pn]]; OptionRowData &data = row.m_RowDef; diff --git a/stepmania/src/ScreenOptions.h b/stepmania/src/ScreenOptions.h index 9cb97a451c..ad20445408 100644 --- a/stepmania/src/ScreenOptions.h +++ b/stepmania/src/ScreenOptions.h @@ -170,6 +170,11 @@ protected: AutoActor m_sprMore; bool m_bMoreShown, m_bWasOnExit[NUM_PLAYERS]; + + // TRICKY: People hold Start to get to PlayerOptions, then + // the repeat events cause them to zip to the bottom. So, ignore + // Start repeat events until we've seen one first pressed event. + bool m_bGotAtLeastOneStartPressed[NUM_PLAYERS]; RageSound m_SoundChangeCol; RageSound m_SoundNextRow;