Prelaod sounds. Allow key repeat in optoins menus.

This commit is contained in:
Glenn Maynard
2003-11-25 21:53:56 +00:00
parent ee339d712e
commit 1df2544777
6 changed files with 62 additions and 56 deletions
+44 -39
View File
@@ -49,9 +49,9 @@ ScreenOptions::ScreenOptions( CString sClassName ) : Screen(sClassName)
{ {
LOG->Trace( "ScreenOptions::ScreenOptions()" ); LOG->Trace( "ScreenOptions::ScreenOptions()" );
m_SoundChangeCol.Load( THEME->GetPathToS("ScreenOptions change") ); m_SoundChangeCol.Load( THEME->GetPathToS("ScreenOptions change"), true );
m_SoundNextRow.Load( THEME->GetPathToS("ScreenOptions next") ); m_SoundNextRow.Load( THEME->GetPathToS("ScreenOptions next"), true );
m_SoundPrevRow.Load( THEME->GetPathToS("ScreenOptions prev") ); m_SoundPrevRow.Load( THEME->GetPathToS("ScreenOptions prev"), true );
m_SoundStart.Load( THEME->GetPathToS("Common start") ); m_SoundStart.Load( THEME->GetPathToS("Common start") );
m_Menu.Load( sClassName ); m_Menu.Load( sClassName );
@@ -576,6 +576,19 @@ void ScreenOptions::Input( const DeviceInput& DeviceI, const InputEventType type
if( m_Menu.m_Back.IsTransitioning() || m_Menu.m_Out.IsTransitioning() ) if( m_Menu.m_Back.IsTransitioning() || m_Menu.m_Out.IsTransitioning() )
return; return;
if( type == IET_RELEASE )
{
switch( MenuI.button )
{
case MENU_BUTTON_START:
case MENU_BUTTON_RIGHT:
case MENU_BUTTON_LEFT:
INPUTMAPPER->ResetKeyRepeat( MenuInput(MenuI.player, MENU_BUTTON_START) );
INPUTMAPPER->ResetKeyRepeat( MenuInput(MenuI.player, MENU_BUTTON_RIGHT) );
INPUTMAPPER->ResetKeyRepeat( MenuInput(MenuI.player, MENU_BUTTON_LEFT) );
}
}
// if we are in dedicated menubutton input and arcade navigation // if we are in dedicated menubutton input and arcade navigation
// check to see if MENU_BUTTON_LEFT and MENU_BUTTON_RIGHT are being held // check to see if MENU_BUTTON_LEFT and MENU_BUTTON_RIGHT are being held
const bool bHoldingLeftOrRight = MenuI.IsValid() && MenuI.button == MENU_BUTTON_START && const bool bHoldingLeftOrRight = MenuI.IsValid() && MenuI.button == MENU_BUTTON_START &&
@@ -583,9 +596,9 @@ void ScreenOptions::Input( const DeviceInput& DeviceI, const InputEventType type
(INPUTMAPPER->IsButtonDown( MenuInput(MenuI.player, MENU_BUTTON_RIGHT) ) || (INPUTMAPPER->IsButtonDown( MenuInput(MenuI.player, MENU_BUTTON_RIGHT) ) ||
INPUTMAPPER->IsButtonDown( MenuInput(MenuI.player, MENU_BUTTON_LEFT) ) ); INPUTMAPPER->IsButtonDown( MenuInput(MenuI.player, MENU_BUTTON_LEFT) ) );
if( bHoldingLeftOrRight ) if( type != IET_RELEASE && bHoldingLeftOrRight )
{ {
Screen::MenuUp( MenuI.player, type ); Move( MenuI.player, -1, type != IET_FIRST_PRESS );
return; return;
} }
@@ -764,10 +777,12 @@ void ScreenOptions::StartGoToNextState()
this->PostScreenMessage( SM_BeginFadingOut, 0 ); this->PostScreenMessage( SM_BeginFadingOut, 0 );
} }
void ScreenOptions::MenuStart( PlayerNumber pn ) void ScreenOptions::MenuStart( PlayerNumber pn, const InputEventType type )
{ {
if( m_Menu.IsTransitioning() ) if( m_Menu.IsTransitioning() )
return; return;
if( type == IET_RELEASE )
return;
if( PREFSMAN->m_bArcadeOptionsNavigation ) if( PREFSMAN->m_bArcadeOptionsNavigation )
{ {
@@ -777,18 +792,18 @@ void ScreenOptions::MenuStart( PlayerNumber pn )
bAllOnExit = false; bAllOnExit = false;
if( m_iCurrentRow[pn] != m_iNumOptionRows ) // not on exit if( m_iCurrentRow[pn] != m_iNumOptionRows ) // not on exit
MenuDown( pn ); // can't go down any more MenuDown( pn, type ); // can't go down any more
else if( bAllOnExit ) else if( bAllOnExit && type == IET_FIRST_PRESS )
this->PostScreenMessage( SM_BeginFadingOut, 0 ); this->PostScreenMessage( SM_BeginFadingOut, 0 );
} }
else // !m_bArcadeOptionsNavigation else if( type == IET_FIRST_PRESS ) // !m_bArcadeOptionsNavigation
{ {
this->PostScreenMessage( SM_BeginFadingOut, 0 ); this->PostScreenMessage( SM_BeginFadingOut, 0 );
} }
} }
void ScreenOptions::ChangeValue( PlayerNumber pn, int iDelta ) void ScreenOptions::ChangeValue( PlayerNumber pn, int iDelta, bool Repeat )
{ {
int iCurRow = m_iCurrentRow[pn]; int iCurRow = m_iCurrentRow[pn];
OptionRow &row = m_OptionRow[iCurRow]; OptionRow &row = m_OptionRow[iCurRow];
@@ -796,20 +811,20 @@ void ScreenOptions::ChangeValue( PlayerNumber pn, int iDelta )
const int iNumOptions = row.choices.size(); const int iNumOptions = row.choices.size();
if( PREFSMAN->m_bArcadeOptionsNavigation ) if( PREFSMAN->m_bArcadeOptionsNavigation )
{ {
/* If START is being pressed, and arcade nav is on, then we're holding left/right
* and start to move backwards. Don't move left and right, too. */
if( PREFSMAN->m_bArcadeOptionsNavigation &&
INPUTMAPPER->IsButtonDown( MenuInput(pn, MENU_BUTTON_START) ) )
return;
if( iCurRow == m_iNumOptionRows || iNumOptions <= 1 ) // 1 or 0 if( iCurRow == m_iNumOptionRows || iNumOptions <= 1 ) // 1 or 0
{ {
if( iDelta < 0 ) Move( pn, iDelta, Repeat );
{
MenuUp( pn );
return;
}
else
{
MenuDown( pn );
return; return;
} }
} }
} if( Repeat )
return;
if( iCurRow == m_iNumOptionRows ) // EXIT is selected if( iCurRow == m_iNumOptionRows ) // EXIT is selected
return; // don't allow a move return; // don't allow a move
@@ -843,35 +858,25 @@ void ScreenOptions::ChangeValue( PlayerNumber pn, int iDelta )
} }
void ScreenOptions::MenuUp( PlayerNumber pn ) void ScreenOptions::Move( PlayerNumber pn, int dir, bool Repeat )
{ {
LOG->Trace("move pn %i, dir %i, rep %i", pn, dir, Repeat);
bool changed = false;
for( int p=0; p<NUM_PLAYERS; p++ ) for( int p=0; p<NUM_PLAYERS; p++ )
{ {
if( m_InputMode == INPUTMODE_INDIVIDUAL && p != pn ) if( m_InputMode == INPUTMODE_INDIVIDUAL && p != pn )
continue; // skip continue; // skip
if( m_iCurrentRow[p] == 0 ) // on first row int row = m_iCurrentRow[p] + dir;
m_iCurrentRow[p] = m_iNumOptionRows; // on exit if( Repeat && ( row == -1 || row == m_iNumOptionRows+1 ) )
else continue; // don't wrap while repeating
m_iCurrentRow[p]--;
OnChange( (PlayerNumber)p );
}
m_SoundPrevRow.Play();
}
wrap( row, m_iNumOptionRows+1 );
m_iCurrentRow[p] = row;
void ScreenOptions::MenuDown( PlayerNumber pn )
{
for( int p=0; p<NUM_PLAYERS; p++ )
{
if( m_InputMode == INPUTMODE_INDIVIDUAL && p != pn )
continue; // skip
if( m_iCurrentRow[p] == m_iNumOptionRows ) // on exit
m_iCurrentRow[p] = 0; // on first row
else
m_iCurrentRow[p]++;
OnChange( (PlayerNumber)p ); OnChange( (PlayerNumber)p );
changed = true;
} }
if( changed )
m_SoundNextRow.Play(); m_SoundNextRow.Play();
} }
+7 -6
View File
@@ -79,18 +79,19 @@ protected:
virtual void OnChange( PlayerNumber pn ); virtual void OnChange( PlayerNumber pn );
virtual void MenuBack( PlayerNumber pn ); virtual void MenuBack( PlayerNumber pn );
virtual void MenuStart( PlayerNumber pn ); virtual void MenuStart( PlayerNumber pn, const InputEventType type );
void StartGoToNextState(); void StartGoToNextState();
virtual void GoToNextState() = 0; virtual void GoToNextState() = 0;
virtual void GoToPrevState() = 0; virtual void GoToPrevState() = 0;
void MenuLeft( PlayerNumber pn ) { ChangeValue(pn,-1); } void MenuLeft( PlayerNumber pn, const InputEventType type ) { ChangeValue(pn,-1,type != IET_FIRST_PRESS); }
void MenuRight( PlayerNumber pn ) { ChangeValue(pn,+1); } void MenuRight( PlayerNumber pn, const InputEventType type ) { ChangeValue(pn,+1,type != IET_FIRST_PRESS); }
void ChangeValue( PlayerNumber pn, int iDelta ); void ChangeValue( PlayerNumber pn, int iDelta, bool Repeat );
void MenuUp( PlayerNumber pn ); void MenuUp( PlayerNumber pn, const InputEventType type ) { Move( pn, -1, type != IET_FIRST_PRESS ); }
void MenuDown( PlayerNumber pn ); void MenuDown( PlayerNumber pn, const InputEventType type ) { Move( pn, +1, type != IET_FIRST_PRESS ); }
void Move( PlayerNumber pn, int dir, bool Repeat );
int GetCurrentRow(PlayerNumber pn = PLAYER_1) const { return m_iCurrentRow[pn]; } int GetCurrentRow(PlayerNumber pn = PLAYER_1) const { return m_iCurrentRow[pn]; }
+2 -2
View File
@@ -546,7 +546,7 @@ void ScreenOptionsMaster::ExportOptions()
} }
} }
void ScreenOptionsMaster::MenuStart( PlayerNumber pn ) void ScreenOptionsMaster::MenuStart( PlayerNumber pn, const InputEventType type )
{ {
if( m_ForceSMOptionsNavigation ) if( m_ForceSMOptionsNavigation )
{ {
@@ -554,7 +554,7 @@ void ScreenOptionsMaster::MenuStart( PlayerNumber pn )
return; return;
} }
ScreenOptions::MenuStart( pn ); ScreenOptions::MenuStart( pn, type );
} }
void ScreenOptionsMaster::GoToNextState() void ScreenOptionsMaster::GoToNextState()
+1 -1
View File
@@ -51,7 +51,7 @@ private:
void SetSaveToProfile( OptionRow &row, OptionRowHandler &hand ); void SetSaveToProfile( OptionRow &row, OptionRowHandler &hand );
protected: protected:
virtual void MenuStart( PlayerNumber pn ); virtual void MenuStart( PlayerNumber pn, const InputEventType type );
virtual void ImportOptions(); virtual void ImportOptions();
virtual void ExportOptions(); virtual void ExportOptions();
+2 -2
View File
@@ -179,7 +179,7 @@ void ScreenProfileOptions::HandleScreenMessage( const ScreenMessage SM )
} }
void ScreenProfileOptions::MenuStart( PlayerNumber pn ) void ScreenProfileOptions::MenuStart( PlayerNumber pn, const InputEventType type )
{ {
CString sProfileID = GetSelectedProfileID(); CString sProfileID = GetSelectedProfileID();
CString sName = GetSelectedProfileName(); CString sName = GetSelectedProfileName();
@@ -202,7 +202,7 @@ void ScreenProfileOptions::MenuStart( PlayerNumber pn )
SCREENMAN->TextEntry( SM_DoneRenaming, ssprintf("Rename profile %s '%s'",sProfileID.c_str(),sName.c_str()), sName, NULL ); SCREENMAN->TextEntry( SM_DoneRenaming, ssprintf("Rename profile %s '%s'",sProfileID.c_str(),sName.c_str()), sName, NULL );
break; break;
default: default:
ScreenOptions::MenuStart( pn ); ScreenOptions::MenuStart( pn, type );
} }
} }
+1 -1
View File
@@ -18,7 +18,7 @@ public:
virtual void HandleScreenMessage( const ScreenMessage SM ); virtual void HandleScreenMessage( const ScreenMessage SM );
virtual void MenuStart( PlayerNumber pn ); virtual void MenuStart( PlayerNumber pn, const InputEventType type );
private: private:
void ImportOptions(); void ImportOptions();