Change event mode to a CoinMode (since using COIN_PAY and EventMode at the same time doesn't make sense).

Split ScreenLogo and ScreenTitleMenu.
In ScreenTitleMenu, add a different animation if using COIN_HOME (for SMMAX2).
Added codes at TitleMenu to change Theme and Announcer.
This commit is contained in:
Chris Danford
2003-04-13 04:50:08 +00:00
parent 6c07fd4d68
commit 82199383a8
39 changed files with 263 additions and 192 deletions
+65 -37
View File
@@ -11,6 +11,7 @@
*/
#include "ScreenTitleMenu.h"
#include "ScreenAttract.h"
#include "ScreenManager.h"
#include "GameConstantsAndTypes.h"
#include "RageUtil.h"
@@ -25,8 +26,13 @@
#include "ThemeManager.h"
#include "SDL_utils.h"
#include "RageSoundManager.h"
#include "CodeDetector.h"
#define LOGO_ON_COMMAND THEME->GetMetric("ScreenTitleMenu","LogoOnCommand")
#define LOGO_HOME_ON_COMMAND THEME->GetMetric("ScreenTitleMenu","LogoHomeOnCommand")
#define VERSION_ON_COMMAND THEME->GetMetric("ScreenTitleMenu","VersionOnCommand")
#define SONGS_ON_COMMAND THEME->GetMetric("ScreenTitleMenu","SongsOnCommand")
#define HELP_X THEME->GetMetricF("ScreenTitleMenu","HelpX")
#define HELP_Y THEME->GetMetricF("ScreenTitleMenu","HelpY")
#define CHOICES_X THEME->GetMetricF("ScreenTitleMenu","ChoicesX")
@@ -39,53 +45,52 @@
#define ZOOM_SELECTED THEME->GetMetricF("ScreenTitleMenu","ZoomSelected")
#define SECONDS_BETWEEN_COMMENTS THEME->GetMetricF("ScreenTitleMenu","SecondsBetweenComments")
#define SECONDS_BEFORE_ATTRACT THEME->GetMetricF("ScreenTitleMenu","SecondsBeforeAttract")
#define HELP_TEXT_HOME THEME->GetMetric("ScreenTitleMenu","HelpTextHome")
#define HELP_TEXT_PAY THEME->GetMetric("ScreenTitleMenu","HelpTextPay")
#define HELP_TEXT_FREE THEME->GetMetric("ScreenTitleMenu","HelpTextFree")
#define HELP_TEXT( coin_mode ) THEME->GetMetric("ScreenTitleMenu","HelpText"+Capitalize(CoinModeToString(coin_mode)))
#define NEXT_SCREEN THEME->GetMetric("ScreenTitleMenu","NextScreen")
const ScreenMessage SM_PlayComment = ScreenMessage(SM_User+1);
const ScreenMessage SM_GoToAttractLoop = ScreenMessage(SM_User+13);
ScreenTitleMenu::ScreenTitleMenu()
ScreenTitleMenu::ScreenTitleMenu() : Screen("ScreenTitleMenu")
{
LOG->Trace( "ScreenTitleMenu::ScreenTitleMenu()" );
GAMESTATE->m_bPlayersCanJoin = true;
if( PREFSMAN->m_CoinMode!=PrefsManager::COIN_HOME && PREFSMAN->m_bJointPremium )
CodeDetector::RefreshCacheItems();
if( PREFSMAN->m_iCoinMode!=COIN_HOME && PREFSMAN->m_bJointPremium )
{
m_JointPremium.LoadFromAniDir( THEME->GetPathToB("ScreenTitleMenu joint premium") );
this->AddChild( &m_JointPremium );
}
switch( PREFSMAN->m_CoinMode )
{
case PrefsManager::COIN_HOME:
// do nothing
break;
case PrefsManager::COIN_PAY:
m_CoinMode.LoadFromAniDir( THEME->GetPathToB("ScreenTitleMenu pay") );
this->AddChild( &m_CoinMode );
break;
case PrefsManager::COIN_FREE:
m_CoinMode.LoadFromAniDir( THEME->GetPathToB("ScreenTitleMenu free") );
this->AddChild( &m_CoinMode );
break;
default:
ASSERT(0);
}
m_Background.LoadFromAniDir( THEME->GetPathToB("ScreenTitleMenu background") );
this->AddChild( &m_Background );
m_sprLogo.Load( THEME->GetPathToG(ssprintf("ScreenLogo %s",GAMESTATE->GetCurrentGameDef()->m_szName)) );
m_sprLogo.Command( PREFSMAN->m_iCoinMode==COIN_HOME ? LOGO_HOME_ON_COMMAND : LOGO_ON_COMMAND );
this->AddChild( &m_sprLogo );
m_textVersion.LoadFromFont( THEME->GetPathToF("Common normal") );
m_textVersion.Command( VERSION_ON_COMMAND );
m_textVersion.SetText( "CVS" );
this->AddChild( &m_textVersion );
m_textSongs.LoadFromFont( THEME->GetPathToF("Common normal") );
m_textSongs.Command( SONGS_ON_COMMAND );
m_textSongs.SetText( ssprintf("%d songs in %d groups, %d courses", SONGMAN->GetNumSongs(), SONGMAN->GetNumGroups(), SONGMAN->GetNumCourses()) );
this->AddChild( &m_textSongs );
CString sCoinMode = CoinModeToString((CoinMode)PREFSMAN->m_iCoinMode);
m_CoinMode.LoadFromAniDir( THEME->GetPathToB("ScreenTitleMenu "+sCoinMode) );
this->AddChild( &m_CoinMode );
m_textHelp.LoadFromFont( THEME->GetPathToF("ScreenTitleMenu help") );
CString sHelpText;
switch( PREFSMAN->m_CoinMode )
{
case PrefsManager::COIN_HOME: sHelpText = HELP_TEXT_HOME; break;
case PrefsManager::COIN_PAY: sHelpText = HELP_TEXT_PAY; break;
case PrefsManager::COIN_FREE: sHelpText = HELP_TEXT_FREE; break;
default: ASSERT(0);
}
m_textHelp.SetText( sHelpText );
m_textHelp.SetText( HELP_TEXT((CoinMode)PREFSMAN->m_iCoinMode) );
m_textHelp.SetXY( HELP_X, HELP_Y );
m_textHelp.SetZoom( 0.5f );
m_textHelp.SetEffectDiffuseBlink();
@@ -93,9 +98,9 @@ ScreenTitleMenu::ScreenTitleMenu()
m_textHelp.SetShadowLength( 2 );
this->AddChild( &m_textHelp );
switch( PREFSMAN->m_CoinMode )
switch( PREFSMAN->m_iCoinMode )
{
case PrefsManager::COIN_HOME:
case COIN_HOME:
int i;
for( i=0; i<NUM_CHOICES; i++ )
{
@@ -107,15 +112,23 @@ ScreenTitleMenu::ScreenTitleMenu()
this->AddChild( &m_textChoice[i] );
}
break;
case PrefsManager::COIN_PAY:
break;
case PrefsManager::COIN_FREE:
case COIN_PAY:
case COIN_FREE:
case COIN_EVENT:
break;
default:
ASSERT(0);
}
m_In.Load( THEME->GetPathToB("ScreenTitleMenu in") );
m_In.StartTransitioning();
this->AddChild( &m_In );
m_Out.Load( THEME->GetPathToB("ScreenTitleMenu out") );
this->AddChild( &m_Out );
SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("title menu game name") );
@@ -164,7 +177,7 @@ void ScreenTitleMenu::Input( const DeviceInput& DeviceI, const InputEventType ty
switch( MenuI.button )
{
case MENU_BUTTON_UP:
if( PREFSMAN->m_CoinMode != PrefsManager::COIN_HOME )
if( PREFSMAN->m_iCoinMode != COIN_HOME )
break;
if( m_In.IsTransitioning() || m_Out.IsTransitioning() )
break;
@@ -177,7 +190,7 @@ void ScreenTitleMenu::Input( const DeviceInput& DeviceI, const InputEventType ty
GainFocus( m_Choice );
break;
case MENU_BUTTON_DOWN:
if( PREFSMAN->m_CoinMode != PrefsManager::COIN_HOME )
if( PREFSMAN->m_iCoinMode != COIN_HOME )
break;
if( m_In.IsTransitioning() || m_Out.IsTransitioning() )
break;
@@ -220,6 +233,21 @@ void ScreenTitleMenu::Input( const DeviceInput& DeviceI, const InputEventType ty
m_Out.StartTransitioning( SM_GoToNextScreen );
}
// detect codes
if( CodeDetector::EnteredCode(GameI.controller,CodeDetector::CODE_NEXT_THEME) )
{
THEME->NextTheme();
SCREENMAN->SystemMessage( "Theme: "+THEME->GetCurThemeName() );
SCREENMAN->SetNewScreen( "ScreenTitleMenu" );
}
if( CodeDetector::EnteredCode(GameI.controller,CodeDetector::CODE_NEXT_ANNOUNCER) )
{
ANNOUNCER->NextAnnouncer();
CString sName = ANNOUNCER->GetCurAnnouncerName();
if( sName=="" ) sName = "(none)";
SCREENMAN->SystemMessage( "Announcer: "+sName );
SCREENMAN->SetNewScreen( "ScreenTitleMenu" );
}
// Screen::Input( DeviceI, type, GameI, MenuI, StyleI );
}