Readd optional song menu.
Three options: yes, to go directly to it without asking. This is faster for people who use the song options menu frequently no, to skip it completely; probably useful for coin mode where the song opts menu may be inappropriate ask, to ask, for people (like me) who use that menu very infrequently but still want it available
This commit is contained in:
@@ -19,6 +19,7 @@
|
||||
#include "AnnouncerManager.h"
|
||||
#include "NoteSkinManager.h"
|
||||
#include "NoteFieldPositioning.h"
|
||||
#include "ScreenSongOptions.h"
|
||||
|
||||
#define PREV_SCREEN( play_mode ) THEME->GetMetric ("ScreenPlayerOptions","PrevScreen"+Capitalize(PlayModeToString(play_mode)))
|
||||
#define NEXT_SCREEN( play_mode ) THEME->GetMetric ("ScreenPlayerOptions","NextScreen"+Capitalize(PlayModeToString(play_mode)))
|
||||
@@ -63,6 +64,23 @@ ScreenPlayerOptions::ScreenPlayerOptions() :
|
||||
NUM_PLAYER_OPTIONS_LINES,
|
||||
true, false );
|
||||
|
||||
/* If we're going to "press start for more options" or skipping options
|
||||
* entirely, we need a different fade out. XXX: this is a hack */
|
||||
if(PREFSMAN->m_ShowSongOptions == PrefsManager::NO)
|
||||
m_Menu.m_Out.Load( THEME->GetPathToB("ScreenPlayerOptions direct out") ); /* direct to stage */
|
||||
else if(PREFSMAN->m_ShowSongOptions == PrefsManager::ASK)
|
||||
m_Menu.m_Out.Load( THEME->GetPathToB("ScreenPlayerOptions option out") ); /* optional song options */
|
||||
|
||||
m_sprOptionsMessage.Load( THEME->GetPathToG("ScreenPlayerOptions options") );
|
||||
m_sprOptionsMessage.StopAnimating();
|
||||
m_sprOptionsMessage.SetXY( CENTER_X, CENTER_Y );
|
||||
m_sprOptionsMessage.SetZoom( 1 );
|
||||
m_sprOptionsMessage.SetDiffuse( RageColor(1,1,1,0) );
|
||||
//this->AddChild( &m_sprOptionsMessage ); // we have to draw this manually over the top of transitions
|
||||
|
||||
m_bAcceptedChoices = false;
|
||||
m_bGoToOptions = ( PREFSMAN->m_ShowSongOptions == PrefsManager::YES );
|
||||
|
||||
SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("player options intro") );
|
||||
}
|
||||
|
||||
@@ -240,28 +258,67 @@ void ScreenPlayerOptions::GoToNextState()
|
||||
{
|
||||
if( GAMESTATE->m_bEditing )
|
||||
SCREENMAN->PopTopScreen();
|
||||
else
|
||||
else if( m_bGoToOptions )
|
||||
SCREENMAN->SetNewScreen( NEXT_SCREEN(GAMESTATE->m_PlayMode) );
|
||||
else
|
||||
SCREENMAN->SetNewScreen( ScreenSongOptions::GetNextScreen() );
|
||||
}
|
||||
|
||||
|
||||
void ScreenPlayerOptions::Update( float fDelta )
|
||||
{
|
||||
ScreenOptions::Update( fDelta );
|
||||
m_sprOptionsMessage.Update( fDelta );
|
||||
}
|
||||
|
||||
void ScreenPlayerOptions::DrawPrimitives()
|
||||
{
|
||||
ScreenOptions::DrawPrimitives();
|
||||
m_sprOptionsMessage.Draw();
|
||||
}
|
||||
|
||||
|
||||
void ScreenPlayerOptions::Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI )
|
||||
{
|
||||
if( !GAMESTATE->m_bEditing &&
|
||||
type == IET_FIRST_PRESS &&
|
||||
!m_Menu.m_In.IsTransitioning() &&
|
||||
MenuI.IsValid() &&
|
||||
MenuI.button == MENU_BUTTON_START &&
|
||||
PREFSMAN->m_ShowSongOptions == PrefsManager::ASK )
|
||||
{
|
||||
if( m_bAcceptedChoices && !m_bGoToOptions )
|
||||
{
|
||||
m_bGoToOptions = true;
|
||||
m_sprOptionsMessage.SetState( 1 );
|
||||
SOUNDMAN->PlayOnce( THEME->GetPathToS("Common start") );
|
||||
}
|
||||
}
|
||||
|
||||
ScreenOptions::Input( DeviceI, type, GameI, MenuI, StyleI );
|
||||
}
|
||||
|
||||
void ScreenPlayerOptions::HandleScreenMessage( const ScreenMessage SM )
|
||||
{
|
||||
switch( SM )
|
||||
{
|
||||
case SM_BeginFadingOut: // when the user accepts the page of options
|
||||
{
|
||||
m_bAcceptedChoices = true;
|
||||
|
||||
float fShowSeconds = m_Menu.m_Out.GetLengthSeconds();
|
||||
|
||||
// show "hold START for options"
|
||||
m_sprOptionsMessage.SetDiffuse( RageColor(1,1,1,0) );
|
||||
m_sprOptionsMessage.BeginTweening( 0.15f ); // fade in
|
||||
m_sprOptionsMessage.SetZoomY( 1 );
|
||||
m_sprOptionsMessage.SetDiffuse( RageColor(1,1,1,1) );
|
||||
m_sprOptionsMessage.BeginTweening( fShowSeconds-0.3f ); // sleep
|
||||
m_sprOptionsMessage.BeginTweening( 0.15f ); // fade out
|
||||
m_sprOptionsMessage.SetDiffuse( RageColor(1,1,1,0) );
|
||||
m_sprOptionsMessage.SetZoomY( 0 );
|
||||
}
|
||||
break;
|
||||
}
|
||||
ScreenOptions::HandleScreenMessage( SM );
|
||||
}
|
||||
Reference in New Issue
Block a user