2003-02-16 04:01:45 +00:00
#include "global.h"
2002-06-24 22:04:31 +00:00
/*
-----------------------------------------------------------------------------
Class: ScreenEvaluation
Desc: See header.
Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved.
Chris Danford
-----------------------------------------------------------------------------
*/
#include "ScreenEvaluation.h"
#include "SongManager.h"
#include "ScreenManager.h"
#include "GameManager.h"
#include "RageUtil.h"
#include "GameConstantsAndTypes.h"
2003-08-03 00:13:55 +00:00
#include "Steps.h"
2002-07-23 01:41:40 +00:00
#include "PrefsManager.h"
2002-06-24 22:04:31 +00:00
#include "RageLog.h"
#include "AnnouncerManager.h"
2002-07-23 01:41:40 +00:00
#include "GameState.h"
2002-08-27 03:59:22 +00:00
#include "GrooveRadar.h"
2002-11-11 04:53:31 +00:00
#include "ThemeManager.h"
2003-07-26 22:53:22 +00:00
#include "RageSounds.h"
2003-04-15 02:47:24 +00:00
#include "ActorUtil.h"
2003-05-11 22:19:40 +00:00
#include "RageTimer.h"
2003-07-11 09:35:28 +00:00
#include "UnlockSystem.h"
2003-07-17 20:10:07 +00:00
#include "Course.h"
2002-06-24 22:04:31 +00:00
2003-03-28 23:13:32 +00:00
const int NUM_SCORE_DIGITS = 9 ;
2003-03-28 05:47:42 +00:00
// metrics that are common to all ScreenEvaluation classes
#define BANNER_WIDTH THEME->GetMetricF("ScreenEvaluation","BannerWidth")
#define BANNER_HEIGHT THEME->GetMetricF("ScreenEvaluation","BannerHeight")
2003-10-27 22:24:33 +00:00
const char * JUDGE_STRING [ NUM_JUDGE_LINES ] =
{
"Marvelous" , "Perfect" , "Great" , "Good" , "Boo" , "Miss" , "OK" , "MaxCombo" , "TotalError"
};
2003-03-28 05:47:42 +00:00
#define SPIN_GRADES THEME->GetMetricB("ScreenEvaluation","SpinGrades")
2003-04-15 02:47:24 +00:00
#define CHEER_DELAY_SECONDS THEME->GetMetricF("ScreenEvaluation","CheerDelaySeconds")
#define BAR_ACTUAL_MAX_COMMAND THEME->GetMetric ("ScreenEvaluation","BarActualMaxCommand")
2003-05-22 01:34:03 +00:00
// #define JUDGE_SOUND_TIME( name ) THEME->GetMetricF( m_sName, ssprintf("JudgeSoundTime%s", name) );
// #define SOUND_ON_FULL_ALPHA THEME->GetMetricB( m_sName, "JudgeSoundIfJudgeGraphicsFullAlpha" )
2003-03-28 05:47:42 +00:00
// metrics that are specific to classes derived from ScreenEvaluation
2003-11-10 23:25:44 +00:00
#define FAILED_SCREEN THEME->GetMetric (m_sName, "FailedScreen")
2003-04-12 06:16:12 +00:00
#define NEXT_SCREEN THEME->GetMetric (m_sName,"NextScreen")
#define END_SCREEN THEME->GetMetric (m_sName,"EndScreen")
#define SHOW_BANNER_AREA THEME->GetMetricB(m_sName,"ShowBannerArea")
#define SHOW_GRADE_AREA THEME->GetMetricB(m_sName,"ShowGradeArea")
#define SHOW_POINTS_AREA THEME->GetMetricB(m_sName,"ShowPointsArea")
#define SHOW_BONUS_AREA THEME->GetMetricB(m_sName,"ShowBonusArea")
#define SHOW_SURVIVED_AREA THEME->GetMetricB(m_sName,"ShowSurvivedArea")
2003-04-15 02:47:24 +00:00
#define SHOW_WIN_AREA THEME->GetMetricB(m_sName,"ShowWinArea")
2003-04-12 06:16:12 +00:00
#define SHOW_JUDGMENT( l ) THEME->GetMetricB(m_sName,ssprintf("Show%s",JUDGE_STRING[l]))
#define SHOW_SCORE_AREA THEME->GetMetricB(m_sName,"ShowScoreArea")
#define SHOW_TIME_AREA THEME->GetMetricB(m_sName,"ShowTimeArea")
2003-10-23 06:28:17 +00:00
#define SHOW_GRAPH_AREA THEME->GetMetricB(m_sName,"ShowGraphArea")
#define SHOW_COMBO_AREA THEME->GetMetricB(m_sName,"ShowComboArea")
2003-10-31 03:10:31 +00:00
#define SHOW_FULL_COMBO THEME->GetMetricB(m_sName,"ShowFullCombo")
2003-10-23 06:28:17 +00:00
#define GRAPH_START_HEIGHT THEME->GetMetricF(m_sName,"GraphStartHeight")
2003-09-27 23:31:42 +00:00
#define TYPE THEME->GetMetric (m_sName,"Type")
2003-03-24 21:37:13 +00:00
2002-06-24 22:04:31 +00:00
2003-03-28 05:47:42 +00:00
const ScreenMessage SM_GoToSelectCourse = ScreenMessage ( SM_User + 3 );
2003-10-15 01:05:20 +00:00
//const ScreenMessage SM_GoToEvaluationSummary = ScreenMessage(SM_User+4);
2003-03-28 05:47:42 +00:00
const ScreenMessage SM_GoToEndScreen = ScreenMessage ( SM_User + 5 );
const ScreenMessage SM_PlayCheer = ScreenMessage ( SM_User + 6 );
2002-06-24 22:04:31 +00:00
2003-09-27 23:31:42 +00:00
ScreenEvaluation :: ScreenEvaluation ( CString sClassName ) : Screen ( sClassName )
2002-06-24 22:04:31 +00:00
{
2003-03-24 21:37:13 +00:00
//
// debugging
//
2003-10-27 22:24:33 +00:00
/*
GAMESTATE->m_PlayMode = PLAY_MODE_ARCADE;
2003-03-24 21:37:13 +00:00
GAMESTATE->m_CurStyle = STYLE_DANCE_VERSUS;
GAMESTATE->m_MasterPlayerNumber = PLAYER_1;
2003-03-28 05:47:42 +00:00
GAMESTATE->m_pCurSong = SONGMAN->GetAllSongs()[0];
2003-10-27 22:24:33 +00:00
// GAMESTATE->m_pCurCourse = SONGMAN->m_pCourses[0];
GAMESTATE->m_pCurNotes[PLAYER_1] = GAMESTATE->m_pCurSong->m_apNotes[0];
GAMESTATE->m_pCurNotes[PLAYER_2] = GAMESTATE->m_pCurSong->m_apNotes[0];
2003-03-24 21:37:13 +00:00
GAMESTATE->m_PlayerOptions[PLAYER_1].m_bHoldNotes = false;
GAMESTATE->m_PlayerOptions[PLAYER_2].m_bHoldNotes = false;
GAMESTATE->m_PlayerOptions[PLAYER_1].m_fScrollSpeed = 2;
GAMESTATE->m_PlayerOptions[PLAYER_2].m_fScrollSpeed = 2;
2003-03-28 05:47:42 +00:00
GAMESTATE->m_iCurrentStageIndex = 2;
2003-03-28 23:13:32 +00:00
*/
2003-03-24 21:37:13 +00:00
2002-07-31 19:40:40 +00:00
LOG -> Trace ( "ScreenEvaluation::ScreenEvaluation()" );
2003-03-24 21:37:13 +00:00
2003-11-10 23:25:44 +00:00
m_bFailed = false ; // the evaluation is not showing failed results by default
2003-04-12 06:16:12 +00:00
m_sName = sClassName ;
2003-09-27 23:31:42 +00:00
if ( ! TYPE . CompareNoCase ( "stage" ) )
m_Type = stage ;
else if ( ! TYPE . CompareNoCase ( "summary" ) )
m_Type = summary ;
else if ( ! TYPE . CompareNoCase ( "course" ) )
m_Type = course ;
else
RageException :: Throw ( "Unknown evaluation type \" %s \" " , TYPE . c_str () );
2003-03-24 21:37:13 +00:00
int p ;
2002-06-24 22:04:31 +00:00
2003-01-24 02:43:07 +00:00
//
// Figure out which statistics and songs we're going to display
//
StageStats stageStats ;
2003-11-10 23:25:44 +00:00
if ( stageStats . AllFailed () ) // if everyone failed
m_bFailed = true ; // flag it for this screen
2003-01-24 02:43:07 +00:00
vector < Song *> vSongsToShow ;
2003-03-24 21:37:13 +00:00
switch ( m_Type )
2002-06-24 22:04:31 +00:00
{
2003-03-24 21:37:13 +00:00
case summary :
2003-01-27 02:00:38 +00:00
GAMESTATE -> GetFinalEvalStatsAndSongs ( stageStats , vSongsToShow );
2002-07-28 20:28:37 +00:00
break ;
2003-03-24 21:37:13 +00:00
case stage :
case course :
2003-07-31 20:34:01 +00:00
LOG -> Trace ( "We made it to stage" );
2003-01-24 02:43:07 +00:00
stageStats = GAMESTATE -> m_CurStageStats ;
2002-07-23 01:41:40 +00:00
break ;
2003-01-24 02:43:07 +00:00
default :
ASSERT ( 0 );
2002-07-23 01:41:40 +00:00
}
2003-10-23 06:28:17 +00:00
stageStats . Finish ();
2003-09-21 00:17:34 +00:00
LOG -> Trace ( "total error: %i, %i" , stageStats . iTotalError [ 0 ], stageStats . iTotalError [ 1 ] );
2002-07-23 01:41:40 +00:00
2003-03-28 23:13:32 +00:00
/*
2003-01-24 02:43:07 +00:00
//
2003-03-24 21:37:13 +00:00
// Debugging
2003-01-24 02:43:07 +00:00
//
2002-06-24 22:04:31 +00:00
{
2003-03-24 21:37:13 +00:00
for( int p=0; p<NUM_PLAYERS; p++ ) // foreach line
for( int r=0; r<NUM_RADAR_CATEGORIES; r++ ) // foreach line
2002-10-06 17:02:04 +00:00
{
2003-03-24 21:37:13 +00:00
stageStats.fRadarPossible[p][r] = 0.5f + r/10.0f;
stageStats.fRadarActual[p][r] = 0.5f + r/10.0f;
2002-10-06 17:02:04 +00:00
}
2002-08-22 09:31:32 +00:00
}
2003-03-28 23:13:32 +00:00
*/
2002-06-24 22:04:31 +00:00
2002-07-23 01:41:40 +00:00
//
// Calculate grades
//
2002-06-24 22:04:31 +00:00
Grade grade [ NUM_PLAYERS ];
2002-07-23 01:41:40 +00:00
for ( p = 0 ; p < NUM_PLAYERS ; p ++ )
{
2003-02-03 05:53:59 +00:00
if ( GAMESTATE -> IsPlayerEnabled ( p ) )
grade [ p ] = stageStats . GetGrade ( ( PlayerNumber ) p );
2003-01-24 02:43:07 +00:00
else
2003-02-03 05:53:59 +00:00
grade [ p ] = GRADE_E ;
2003-08-11 12:14:26 +00:00
if ( PREFSMAN -> m_iScoringType == PrefsManager :: SCORING_5TH )
{
int ScoreBonuses [ 9 ] = { 0 , 0 , 100 , 1000 , 10000 , 100000 , 1000000 , 10000000 , 10000000 };
GAMESTATE -> m_CurStageStats . iBonus [ p ] += ScoreBonuses [( int ) grade [ p ] ];
2003-08-12 06:09:49 +00:00
stageStats . iBonus [ p ] += ScoreBonuses [( int ) grade [ p ] ];
2003-08-11 12:14:26 +00:00
}
2002-07-23 01:41:40 +00:00
}
2002-07-28 20:28:37 +00:00
Grade max_grade = GRADE_NO_DATA ;
for ( p = 0 ; p < NUM_PLAYERS ; p ++ )
2003-08-07 10:15:16 +00:00
{
2002-07-28 20:28:37 +00:00
max_grade = max ( max_grade , grade [ p ] );
2003-08-07 10:15:16 +00:00
// if its extra stage, update # passed stages
if ( PREFSMAN -> m_bUseUnlockSystem &&
( GAMESTATE -> IsExtraStage () || GAMESTATE -> IsExtraStage2 () ) &&
grade [ p ] > GRADE_E &&
m_Type != summary )
2003-09-19 07:02:53 +00:00
UNLOCKSYS -> UnlockClearExtraStage ();
2003-08-07 10:15:16 +00:00
}
2002-06-24 22:04:31 +00:00
2003-01-24 02:43:07 +00:00
//
2002-08-27 16:53:25 +00:00
// update persistent statistics
2003-01-24 02:43:07 +00:00
//
2003-10-14 17:06:30 +00:00
int iPersonalHighScoreIndex [ NUM_PLAYERS ];
int iMachineHighScoreIndex [ NUM_PLAYERS ];
RankingCategory rc [ NUM_PLAYERS ];
memset ( iPersonalHighScoreIndex , - 1 , sizeof ( iPersonalHighScoreIndex ) );
memset ( iMachineHighScoreIndex , - 1 , sizeof ( iMachineHighScoreIndex ) );
memset ( rc , - 1 , sizeof ( rc ) );
2002-07-31 04:59:49 +00:00
2003-02-16 10:12:03 +00:00
2003-10-14 17:06:30 +00:00
for ( p = 0 ; p < NUM_PLAYERS ; p ++ )
2003-02-14 21:42:44 +00:00
{
2003-10-14 17:06:30 +00:00
if ( ! GAMESTATE -> IsHumanPlayer ( p ) )
continue ; // skip
if ( ! GAMESTATE -> m_SongOptions . m_bSaveScore )
continue ; // skip
2003-11-10 23:25:44 +00:00
if ( m_bFailed )
continue ; // skip
2003-10-14 17:06:30 +00:00
switch ( m_Type )
2003-02-16 10:12:03 +00:00
{
2003-10-14 17:06:30 +00:00
case stage :
2003-05-09 05:56:05 +00:00
{
2003-10-14 17:06:30 +00:00
ASSERT ( GAMESTATE -> m_pCurNotes [ p ] );
Steps :: MemCardData :: HighScore hs ;
hs . grade = grade [ p ];
2003-10-22 12:51:19 +00:00
hs . iScore = stageStats . iScore [ p ] + stageStats . iBonus [ p ];
2003-10-20 01:06:26 +00:00
hs . fPercentDP = stageStats . GetPercentDancePoints ( ( PlayerNumber ) p );
2003-10-14 17:06:30 +00:00
GAMESTATE -> m_pCurNotes [ p ] -> AddHighScore ( ( PlayerNumber ) p , hs , iPersonalHighScoreIndex [ p ], iMachineHighScoreIndex [ p ] );
// update unlock data if unlocks are on
if ( PREFSMAN -> m_bUseUnlockSystem )
2003-07-11 09:35:28 +00:00
{
2003-10-14 17:06:30 +00:00
UNLOCKSYS -> UnlockClearStage ();
UNLOCKSYS -> UnlockAddAP ( grade [ p ] );
UNLOCKSYS -> UnlockAddSP ( grade [ p ] );
// we want to save dance points here if we are in event mode.
// otherwise, dance points will never get saved except
// in nonstop mode.
if ( PREFSMAN -> m_bEventMode )
UNLOCKSYS -> UnlockAddDP ( ( float ) stageStats . iActualDancePoints [ p ] );
2003-07-12 21:41:50 +00:00
2003-07-11 09:35:28 +00:00
}
}
2003-10-14 17:06:30 +00:00
break ;
case summary :
{
StepsType nt = GAMESTATE -> GetCurrentStyleDef () -> m_StepsType ;
2003-07-11 09:35:28 +00:00
2003-10-14 17:06:30 +00:00
float fAverageMeter = stageStats . iMeter [ p ] / ( float ) PREFSMAN -> m_iNumArcadeStages ;
rc [ p ] = AverageMeterToRankingCategory ( fAverageMeter );
2003-07-11 09:35:28 +00:00
2003-10-14 17:06:30 +00:00
SongManager :: CategoryData :: HighScore hs ;
hs . iScore = stageStats . iScore [ p ];
SONGMAN -> AddHighScore ( nt , rc [ p ], ( PlayerNumber ) p , hs , iMachineHighScoreIndex [ p ] );
// If unlocking is enabled, save the dance points
if ( PREFSMAN -> m_bUseUnlockSystem )
2003-10-14 21:39:13 +00:00
UNLOCKSYS -> UnlockAddDP ( ( float ) stageStats . iActualDancePoints [ p ] );
2003-10-14 17:06:30 +00:00
}
break ;
case course :
{
Course * pCourse = GAMESTATE -> m_pCurCourse ;
if ( pCourse )
{
int score ;
if ( pCourse -> IsOni () )
score = stageStats . iActualDancePoints [ p ];
else
score = stageStats . iScore [ p ];
StepsType nt = GAMESTATE -> GetCurrentStyleDef () -> m_StepsType ;
Course :: MemCardData :: HighScore hs ;
hs . iScore = score ;
hs . fSurviveTime = stageStats . fAliveSeconds [ p ];
pCourse -> AddHighScore ( nt , ( PlayerNumber ) p , hs , iPersonalHighScoreIndex [ p ], iMachineHighScoreIndex [ p ] );
}
// If unlocking is enabled, save the dance points
// (for courses)
if ( PREFSMAN -> m_bUseUnlockSystem )
{
for ( p = 0 ; p < NUM_PLAYERS ; p ++ )
{
if ( ! GAMESTATE -> IsPlayerEnabled ( ( PlayerNumber ) p ) )
continue ; // skip
UNLOCKSYS -> UnlockAddDP ( ( float ) stageStats . iActualDancePoints [ p ] );
UNLOCKSYS -> UnlockAddAP ( ( float ) stageStats . iSongsPassed [ p ] );
UNLOCKSYS -> UnlockAddSP ( ( float ) stageStats . iSongsPassed [ p ] );
}
}
// cannot just use score since it may be nonstop mode
}
break ;
default :
ASSERT ( 0 );
}
}
// If both players get a machine high score, a player
// whose score is added later may bump the players who were
// added earlier. Adjust for this.
for ( p = 0 ; p < NUM_PLAYERS ; p ++ )
{
if ( ! GAMESTATE -> IsHumanPlayer ( p ) )
continue ; // skip
if ( iMachineHighScoreIndex [ p ] == - 1 ) // no record
continue ; // skip
2003-11-10 23:25:44 +00:00
if ( m_bFailed ) // both players failed
continue ; // skip
2003-10-14 17:06:30 +00:00
for ( int p2 = 0 ; p2 < p ; p2 ++ )
{
if ( ! GAMESTATE -> IsHumanPlayer ( p2 ) )
continue ; // skip
if ( iMachineHighScoreIndex [ p2 ] == - 1 ) // no record
continue ; // skip
bool bPlayedSameSteps ;
switch ( m_Type )
{
case stage :
bPlayedSameSteps = GAMESTATE -> m_pCurNotes [ p ] == GAMESTATE -> m_pCurNotes [ p2 ];
break ;
case summary :
bPlayedSameSteps = rc [ p ] == rc [ p2 ];
break ;
case course :
bPlayedSameSteps = true ;
break ;
}
if ( iMachineHighScoreIndex [ p ] >= iMachineHighScoreIndex [ p2 ] )
{
iMachineHighScoreIndex [ p2 ] ++ ;
if ( iMachineHighScoreIndex [ p2 ] >= NUM_RANKING_LINES )
iMachineHighScoreIndex [ p2 ] = - 1 ;
}
2003-02-16 10:12:03 +00:00
}
2002-06-24 22:04:31 +00:00
}
2003-01-24 02:43:07 +00:00
m_bTryExtraStage =
GAMESTATE -> HasEarnedExtraStage () &&
2003-03-24 21:37:13 +00:00
m_Type == stage ;
2003-02-28 04:31:36 +00:00
2003-03-24 21:37:13 +00:00
2003-04-12 06:16:12 +00:00
m_Menu . Load ( m_sName );
2003-03-24 21:37:13 +00:00
this -> AddChild ( & m_Menu );
2003-11-10 23:25:44 +00:00
if ( m_bFailed && m_Type == stage )
{
m_bgFailedBack . LoadFromAniDir ( THEME -> GetPathToB ( "ScreenEvaluationStage Failed Background" ) );
m_bgFailedOverlay . LoadFromAniDir ( THEME -> GetPathToB ( "ScreenEvaluationStage Failed Overlay" ) );
}
else if ( m_Type == stage )
{
// the themer can use the regular background for passed background
m_bgPassedOverlay . LoadFromAniDir ( THEME -> GetPathToB ( "ScreenEvaluationStage Passed Overlay" ) );
}
2003-01-24 02:43:07 +00:00
//
2003-03-24 21:37:13 +00:00
// init banner area
2003-01-24 02:43:07 +00:00
//
2003-03-28 05:47:42 +00:00
if ( SHOW_BANNER_AREA )
2003-03-24 21:37:13 +00:00
{
2003-03-28 05:47:42 +00:00
switch ( m_Type )
2003-03-24 21:37:13 +00:00
{
2003-03-28 05:47:42 +00:00
case stage :
2003-03-24 21:37:13 +00:00
{
2003-03-28 05:47:42 +00:00
m_LargeBanner . LoadFromSong ( GAMESTATE -> m_pCurSong );
2003-07-03 06:38:57 +00:00
m_LargeBanner . ScaleToClipped ( BANNER_WIDTH , BANNER_HEIGHT );
2003-04-15 02:47:24 +00:00
m_LargeBanner . SetName ( "LargeBanner" );
UtilSetXYAndOnCommand ( m_LargeBanner , "ScreenEvaluation" );
2003-03-28 05:47:42 +00:00
this -> AddChild ( & m_LargeBanner );
2003-03-24 21:37:13 +00:00
2003-04-12 17:39:27 +00:00
m_sprLargeBannerFrame . Load ( THEME -> GetPathToG ( "ScreenEvaluation banner frame" ) );
2003-04-15 02:47:24 +00:00
m_sprLargeBannerFrame . SetName ( "LargeBanner" );
UtilSetXYAndOnCommand ( m_sprLargeBannerFrame , "ScreenEvaluation" );
2003-03-28 05:47:42 +00:00
this -> AddChild ( & m_sprLargeBannerFrame );
2003-04-12 17:39:27 +00:00
m_sprStage . Load ( THEME -> GetPathToG ( "ScreenEvaluation stage " + GAMESTATE -> GetStageText ()) );
2003-04-15 02:47:24 +00:00
m_sprStage . SetName ( "Stage" );
UtilSetXYAndOnCommand ( m_sprStage , "ScreenEvaluation" );
2003-03-28 05:47:42 +00:00
this -> AddChild ( & m_sprStage );
for ( int p = 0 ; p < NUM_PLAYERS ; p ++ )
{
if ( ! GAMESTATE -> IsPlayerEnabled ( p ) )
continue ; // skip
2003-05-09 06:04:50 +00:00
m_DifficultyIcon [ p ]. Load ( THEME -> GetPathToG ( "ScreenEvaluation difficulty icons 1x5" ) );
2003-03-28 05:47:42 +00:00
m_DifficultyIcon [ p ]. SetFromNotes ( ( PlayerNumber ) p , GAMESTATE -> m_pCurNotes [ p ] );
2003-04-15 02:47:24 +00:00
m_DifficultyIcon [ p ]. SetName ( ssprintf ( "DifficultyIconP%d" , p + 1 ) );
UtilSetXYAndOnCommand ( m_DifficultyIcon [ p ], "ScreenEvaluation" );
2003-03-28 05:47:42 +00:00
this -> AddChild ( & m_DifficultyIcon [ p ] );
2003-04-12 17:39:27 +00:00
m_textPlayerOptions [ p ]. LoadFromFont ( THEME -> GetPathToF ( "Common normal" ) );
2003-03-28 05:47:42 +00:00
CString sPO = GAMESTATE -> m_PlayerOptions [ p ]. GetString ();
sPO . Replace ( ", " , " \n " );
2003-04-15 02:47:24 +00:00
m_textPlayerOptions [ p ]. SetName ( ssprintf ( "PlayerOptionsP%d" , p + 1 ) );
UtilSetXYAndOnCommand ( m_textPlayerOptions [ p ], "ScreenEvaluation" );
2003-03-28 05:47:42 +00:00
m_textPlayerOptions [ p ]. SetText ( sPO );
this -> AddChild ( & m_textPlayerOptions [ p ] );
}
2003-03-24 21:37:13 +00:00
}
2003-03-28 05:47:42 +00:00
break ;
case summary :
2003-03-24 21:37:13 +00:00
{
2003-03-28 05:47:42 +00:00
for ( unsigned i = 0 ; i < vSongsToShow . size (); i ++ )
{
m_SmallBanner [ i ]. LoadFromSong ( vSongsToShow [ i ] );
2003-07-03 06:38:57 +00:00
m_SmallBanner [ i ]. ScaleToClipped ( BANNER_WIDTH , BANNER_HEIGHT );
2003-04-15 02:47:24 +00:00
m_SmallBanner [ i ]. SetName ( ssprintf ( "SmallBanner%d" , i + 1 ) );
UtilSetXYAndOnCommand ( m_SmallBanner [ i ], "ScreenEvaluation" );
2003-03-28 05:47:42 +00:00
this -> AddChild ( & m_SmallBanner [ i ] );
2003-03-24 21:37:13 +00:00
2003-04-12 17:39:27 +00:00
m_sprSmallBannerFrame [ i ]. Load ( THEME -> GetPathToG ( "ScreenEvaluation banner frame" ) );
2003-04-15 02:47:24 +00:00
m_sprSmallBannerFrame [ i ]. SetName ( ssprintf ( "SmallBanner%d" , i + 1 ) );
UtilSetXYAndOnCommand ( m_sprSmallBannerFrame [ i ], "ScreenEvaluation" );
2003-03-28 05:47:42 +00:00
this -> AddChild ( & m_sprSmallBannerFrame [ i ] );
}
2003-03-24 21:37:13 +00:00
}
2003-03-28 05:47:42 +00:00
break ;
case course :
{
m_LargeBanner . LoadFromCourse ( GAMESTATE -> m_pCurCourse );
2003-07-03 06:38:57 +00:00
m_LargeBanner . ScaleToClipped ( BANNER_WIDTH , BANNER_HEIGHT );
2003-04-15 02:47:24 +00:00
m_LargeBanner . SetName ( "LargeBanner" );
UtilSetXYAndOnCommand ( m_LargeBanner , "ScreenEvaluation" );
2003-03-28 05:47:42 +00:00
this -> AddChild ( & m_LargeBanner );
2003-03-24 21:37:13 +00:00
2003-04-12 17:39:27 +00:00
m_sprLargeBannerFrame . Load ( THEME -> GetPathToG ( "ScreenEvaluation banner frame" ) );
2003-04-15 02:47:24 +00:00
m_sprLargeBannerFrame . SetName ( "LargeBanner" );
UtilSetXYAndOnCommand ( m_sprLargeBannerFrame , "ScreenEvaluation" );
2003-03-28 05:47:42 +00:00
this -> AddChild ( & m_sprLargeBannerFrame );
}
break ;
default :
ASSERT ( 0 );
2003-03-24 21:37:13 +00:00
}
}
2003-10-23 06:28:17 +00:00
//
// init graph area
//
if ( SHOW_GRAPH_AREA )
{
for ( p = 0 ; p < NUM_PLAYERS ; p ++ )
{
if ( ! GAMESTATE -> IsPlayerEnabled ( p ) )
continue ; // skip
m_Graph [ p ]. SetName ( ssprintf ( "GraphP%i" , p + 1 ) );
m_Graph [ p ]. Load ( THEME -> GetPathToG ( ssprintf ( "%s graph p%i" , m_sName . c_str (), p + 1 )), GRAPH_START_HEIGHT );
m_Graph [ p ]. LoadFromStageStats ( stageStats , ( PlayerNumber ) p );
SET_XY_AND_ON_COMMAND ( m_Graph [ p ] );
this -> AddChild ( & m_Graph [ p ] );
}
}
if ( SHOW_COMBO_AREA )
{
for ( p = 0 ; p < NUM_PLAYERS ; p ++ )
{
if ( ! GAMESTATE -> IsPlayerEnabled ( p ) )
continue ; // skip
m_Combo [ p ]. SetName ( ssprintf ( "ComboP%i" , p + 1 ) );
m_Combo [ p ]. Load ( ssprintf ( "ScreenEvaluationStage combo p%i" , p + 1 ), stageStats , ( PlayerNumber ) p );
SET_XY_AND_ON_COMMAND ( m_Combo [ p ] );
this -> AddChild ( & m_Combo [ p ] );
}
}
2003-03-24 21:37:13 +00:00
//
// init grade area
//
2003-03-28 05:47:42 +00:00
if ( SHOW_GRADE_AREA )
2002-08-22 09:31:32 +00:00
{
2003-03-28 05:47:42 +00:00
for ( p = 0 ; p < NUM_PLAYERS ; p ++ )
2003-03-25 21:17:29 +00:00
{
2003-03-28 05:47:42 +00:00
if ( ! GAMESTATE -> IsPlayerEnabled ( ( PlayerNumber ) p ) )
continue ; // skip
2003-03-24 21:37:13 +00:00
2003-07-04 18:42:53 +00:00
m_sprGradeFrame [ p ]. Load ( THEME -> GetPathToG ( ssprintf ( "ScreenEvaluation grade frame p%d" , p + 1 )) );
2003-04-15 02:47:24 +00:00
m_sprGradeFrame [ p ]. SetName ( ssprintf ( "GradeFrameP%d" , p + 1 ) );
UtilSetXYAndOnCommand ( m_sprGradeFrame [ p ], "ScreenEvaluation" );
2003-03-28 05:47:42 +00:00
this -> AddChild ( & m_sprGradeFrame [ p ] );
2003-03-24 21:37:13 +00:00
2003-04-12 17:39:27 +00:00
m_Grades [ p ]. Load ( THEME -> GetPathToG ( "ScreenEvaluation grades" ) );
2003-03-31 03:11:31 +00:00
m_Grades [ p ]. SetGrade ( ( PlayerNumber ) p , grade [ p ] );
2003-04-15 02:47:24 +00:00
m_Grades [ p ]. SetName ( ssprintf ( "GradeP%d" , p + 1 ) );
UtilSetXYAndOnCommand ( m_Grades [ p ], "ScreenEvaluation" );
2003-03-28 05:47:42 +00:00
if ( SPIN_GRADES )
2003-03-31 03:11:31 +00:00
m_Grades [ p ]. Spin ();
2003-03-28 05:47:42 +00:00
this -> AddChild ( & m_Grades [ p ] );
2003-03-25 21:17:29 +00:00
}
2003-03-24 21:37:13 +00:00
}
2003-03-28 05:47:42 +00:00
//
// init points area
//
if ( SHOW_POINTS_AREA )
{
for ( p = 0 ; p < NUM_PLAYERS ; p ++ )
{
2003-10-13 04:43:36 +00:00
if ( ! GAMESTATE -> IsPlayerEnabled ( ( PlayerNumber ) p ) )
continue ; // skip
2003-04-15 02:47:24 +00:00
m_sprPercentFrame [ p ]. SetName ( ssprintf ( "PercentFrameP%d" , p + 1 ) );
2003-10-05 23:00:26 +00:00
m_sprPercentFrame [ p ]. Load ( THEME -> GetPathToG ( ssprintf ( "ScreenEvaluation percent frame p%d" , p + 1 )) );
2003-04-15 02:47:24 +00:00
UtilSetXYAndOnCommand ( m_sprPercentFrame [ p ], "ScreenEvaluation" );
2003-03-28 05:47:42 +00:00
this -> AddChild ( & m_sprPercentFrame [ p ] );
2003-10-05 23:16:29 +00:00
/* Use "ScreenEvaluation Percent" for the [metric set], but position and
2003-10-05 00:33:05 +00:00
* tween it with "PercentP1X", etc. */
2003-10-05 23:16:29 +00:00
m_Percent [ p ]. SetName ( "ScreenEvaluation Percent" );
2003-10-05 00:33:05 +00:00
m_Percent [ p ]. Load ( ( PlayerNumber ) p );
m_Percent [ p ]. SetXY ( THEME -> GetMetricF ( "ScreenEvaluation" , ssprintf ( "PercentP%dX" , p + 1 )),
THEME -> GetMetricF ( "ScreenEvaluation" , ssprintf ( "PercentP%dY" , p + 1 )) );
m_Percent [ p ]. Command ( THEME -> GetMetric ( "ScreenEvaluation" , ssprintf ( "PercentP%dOnCommand" , p + 1 )) );
this -> AddChild ( & m_Percent [ p ] );
2003-03-28 05:47:42 +00:00
}
}
2003-03-24 21:37:13 +00:00
//
// init bonus area
//
2003-03-28 05:47:42 +00:00
if ( SHOW_BONUS_AREA )
2003-03-24 21:37:13 +00:00
{
2003-03-28 05:47:42 +00:00
for ( p = 0 ; p < NUM_PLAYERS ; p ++ )
2002-06-24 22:04:31 +00:00
{
2003-03-28 05:47:42 +00:00
if ( ! GAMESTATE -> IsPlayerEnabled ( ( PlayerNumber ) p ) )
continue ; // skip
2002-07-23 01:41:40 +00:00
2003-07-04 18:42:53 +00:00
m_sprBonusFrame [ p ]. Load ( THEME -> GetPathToG ( ssprintf ( "ScreenEvaluation bonus frame p%d" , p + 1 )) );
2003-04-15 02:47:24 +00:00
m_sprBonusFrame [ p ]. SetName ( ssprintf ( "BonusFrameP%d" , p + 1 ) );
UtilSetXYAndOnCommand ( m_sprBonusFrame [ p ], "ScreenEvaluation" );
2003-03-28 05:47:42 +00:00
this -> AddChild ( & m_sprBonusFrame [ p ] );
for ( int r = 0 ; r < NUM_RADAR_CATEGORIES ; r ++ ) // foreach line
{
2003-07-04 20:15:15 +00:00
m_sprPossibleBar [ p ][ r ]. Load ( THEME -> GetPathToG ( ssprintf ( "ScreenEvaluation bar possible p%d" , p + 1 )) );
2003-03-28 05:47:42 +00:00
m_sprPossibleBar [ p ][ r ]. SetWidth ( m_sprPossibleBar [ p ][ r ]. GetUnzoomedWidth () * stageStats . fRadarPossible [ p ][ r ] );
2003-04-15 02:47:24 +00:00
m_sprPossibleBar [ p ][ r ]. SetName ( ssprintf ( "BarPossible%dP%d" , r + 1 , p + 1 ) );
UtilSetXYAndOnCommand ( m_sprPossibleBar [ p ][ r ], "ScreenEvaluation" );
2003-03-28 05:47:42 +00:00
this -> AddChild ( & m_sprPossibleBar [ p ][ r ] );
2003-07-04 20:15:15 +00:00
m_sprActualBar [ p ][ r ]. Load ( THEME -> GetPathToG ( ssprintf ( "ScreenEvaluation bar actual p%d" , p + 1 )) );
2003-07-24 13:35:20 +00:00
// should be out of the possible bar, not actual (whatever value that is at)
m_sprActualBar [ p ][ r ]. SetWidth ( m_sprPossibleBar [ p ][ r ]. GetUnzoomedWidth () * stageStats . fRadarActual [ p ][ r ] );
float value = ( float ) 100 * m_sprActualBar [ p ][ r ]. GetUnzoomedWidth () / m_sprPossibleBar [ p ][ r ]. GetUnzoomedWidth ();
LOG -> Trace ( "Radar bar %d of 5 - %f percent" , r , value );
2003-04-15 02:47:24 +00:00
m_sprActualBar [ p ][ r ]. SetName ( ssprintf ( "BarActual%dP%d" , r + 1 , p + 1 ) );
UtilSetXYAndOnCommand ( m_sprActualBar [ p ][ r ], "ScreenEvaluation" );
2003-07-24 13:35:20 +00:00
// .99999 is fairly close to 1.00, so we use that
if ( stageStats . fRadarActual [ p ][ r ] > 0.99999f )
2003-03-28 05:47:42 +00:00
m_sprActualBar [ p ][ r ]. Command ( BAR_ACTUAL_MAX_COMMAND );
this -> AddChild ( & m_sprActualBar [ p ][ r ] );
}
2002-06-24 22:04:31 +00:00
}
}
2003-03-28 05:47:42 +00:00
2003-01-24 02:43:07 +00:00
//
2003-03-28 05:47:42 +00:00
// init survived area
//
if ( SHOW_SURVIVED_AREA )
{
for ( p = 0 ; p < NUM_PLAYERS ; p ++ )
{
if ( ! GAMESTATE -> IsPlayerEnabled ( ( PlayerNumber ) p ) )
continue ; // skip
2003-07-04 18:42:53 +00:00
m_sprSurvivedFrame [ p ]. Load ( THEME -> GetPathToG ( ssprintf ( "ScreenEvaluation survived frame p%d" , p + 1 )) );
2003-04-15 02:47:24 +00:00
m_sprSurvivedFrame [ p ]. SetName ( ssprintf ( "SurvivedFrameP%d" , p + 1 ) );
UtilSetXYAndOnCommand ( m_sprSurvivedFrame [ p ], "ScreenEvaluation" );
2003-03-28 05:47:42 +00:00
this -> AddChild ( & m_sprSurvivedFrame [ p ] );
2003-04-12 17:39:27 +00:00
m_textSurvivedNumber [ p ]. LoadFromNumbers ( THEME -> GetPathToN ( "ScreenEvaluation stage" ) );
2003-03-28 05:47:42 +00:00
m_textSurvivedNumber [ p ]. EnableShadow ( false );
2003-07-06 10:01:59 +00:00
// curewater: edited the "# stages cleared" text so it deducts one if you failed.
// Should be accurate, but I'm not sure if its "standard" that (bool)true = 1. (assumption)
m_textSurvivedNumber [ p ]. SetText ( ssprintf ( "%02d" , stageStats . iSongsPlayed [ p ] - ( int ) stageStats . bFailed [ p ]) );
2003-04-15 02:47:24 +00:00
m_textSurvivedNumber [ p ]. SetName ( ssprintf ( "SurvivedNumberP%d" , p + 1 ) );
UtilSetXYAndOnCommand ( m_textSurvivedNumber [ p ], "ScreenEvaluation" );
2003-03-28 05:47:42 +00:00
this -> AddChild ( & m_textSurvivedNumber [ p ] );
}
}
2003-04-15 02:47:24 +00:00
//
// init win area
//
if ( SHOW_WIN_AREA )
{
for ( p = 0 ; p < NUM_PLAYERS ; p ++ )
{
if ( ! GAMESTATE -> IsPlayerEnabled ( ( PlayerNumber ) p ) )
continue ; // skip
2003-07-04 18:42:53 +00:00
m_sprWinFrame [ p ]. Load ( THEME -> GetPathToG ( ssprintf ( "ScreenEvaluation win frame p%d" , p + 1 )) );
2003-04-15 02:47:24 +00:00
m_sprWinFrame [ p ]. SetName ( ssprintf ( "WinFrameP%d" , p + 1 ) );
UtilSetXYAndOnCommand ( m_sprWinFrame [ p ], "ScreenEvaluation" );
this -> AddChild ( & m_sprWinFrame [ p ] );
2003-07-04 18:42:53 +00:00
m_sprWin [ p ]. Load ( THEME -> GetPathToG ( ssprintf ( "ScreenEvaluation win p%d 1x3" , p + 1 )) );
2003-04-15 02:47:24 +00:00
m_sprWin [ p ]. StopAnimating ();
2003-07-04 18:42:53 +00:00
int iFrame = GAMESTATE -> GetStageResult ( ( PlayerNumber ) p );
2003-04-21 02:41:10 +00:00
m_sprWin [ p ]. SetState ( iFrame );
2003-04-15 02:47:24 +00:00
m_sprWin [ p ]. SetName ( ssprintf ( "WinP%d" , p + 1 ) );
UtilSetXYAndOnCommand ( m_sprWin [ p ], "ScreenEvaluation" );
this -> AddChild ( & m_sprWin [ p ] );
}
}
2003-03-28 05:47:42 +00:00
//
// init judgment area
2003-01-24 02:43:07 +00:00
//
2003-02-14 06:53:13 +00:00
int l ;
for ( l = 0 ; l < NUM_JUDGE_LINES ; l ++ )
2002-09-10 08:21:55 +00:00
{
2003-05-22 01:34:03 +00:00
// m_TimeToPlayJudgeSound[l] = -1;
2003-07-25 08:05:29 +00:00
if ( l == 0 && ! GAMESTATE -> ShowMarvelous () )
2003-04-11 00:12:07 +00:00
continue ; // skip
2003-03-28 05:47:42 +00:00
if ( SHOW_JUDGMENT ( l ) )
2002-09-10 08:21:55 +00:00
{
2003-10-27 22:24:33 +00:00
m_sprJudgeLabels [ l ]. Load ( THEME -> GetPathToG ( "ScreenEvaluation judge labels" ) );
2003-03-28 05:47:42 +00:00
m_sprJudgeLabels [ l ]. StopAnimating ();
m_sprJudgeLabels [ l ]. SetState ( l );
2003-04-15 02:47:24 +00:00
m_sprJudgeLabels [ l ]. SetName ( ssprintf ( "%sLabel" , JUDGE_STRING [ l ]) );
UtilSetXYAndOnCommand ( m_sprJudgeLabels [ l ], "ScreenEvaluation" );
2003-03-28 05:47:42 +00:00
this -> AddChild ( & m_sprJudgeLabels [ l ] );
2003-05-22 01:34:03 +00:00
// m_soundJudgeSound[l].Load( THEME->GetPathToS( ssprintf("ScreenEvaluation JudgeSound %s", JUDGE_STRING[l]) ) );
// m_TimeToPlayJudgeSound[l] = JUDGE_SOUND_TIME( JUDGE_STRING[l] );
2003-05-11 22:19:40 +00:00
2003-03-28 05:47:42 +00:00
for ( p = 0 ; p < NUM_PLAYERS ; p ++ )
{
if ( ! GAMESTATE -> IsPlayerEnabled ( ( PlayerNumber ) p ) )
continue ; // skip
2003-04-12 17:39:27 +00:00
m_textJudgeNumbers [ l ][ p ]. LoadFromNumbers ( THEME -> GetPathToN ( "ScreenEvaluation judge" ) );
2003-03-28 05:47:42 +00:00
m_textJudgeNumbers [ l ][ p ]. EnableShadow ( false );
m_textJudgeNumbers [ l ][ p ]. SetDiffuse ( PlayerToColor ( p ) );
2003-04-15 02:47:24 +00:00
m_textJudgeNumbers [ l ][ p ]. SetName ( ssprintf ( "%sNumberP%d" , JUDGE_STRING [ l ], p + 1 ) );
UtilSetXYAndOnCommand ( m_textJudgeNumbers [ l ][ p ], "ScreenEvaluation" );
2003-03-28 05:47:42 +00:00
this -> AddChild ( & m_textJudgeNumbers [ l ][ p ] );
int iValue ;
switch ( l )
{
case 0 : iValue = stageStats . iTapNoteScores [ p ][ TNS_MARVELOUS ]; break ;
case 1 : iValue = stageStats . iTapNoteScores [ p ][ TNS_PERFECT ]; break ;
case 2 : iValue = stageStats . iTapNoteScores [ p ][ TNS_GREAT ]; break ;
case 3 : iValue = stageStats . iTapNoteScores [ p ][ TNS_GOOD ]; break ;
case 4 : iValue = stageStats . iTapNoteScores [ p ][ TNS_BOO ]; break ;
case 5 : iValue = stageStats . iTapNoteScores [ p ][ TNS_MISS ]; break ;
2003-04-10 05:46:31 +00:00
case 6 : iValue = stageStats . iHoldNoteScores [ p ][ HNS_OK ]; break ;
2003-03-28 05:47:42 +00:00
case 7 : iValue = stageStats . iMaxCombo [ p ]; break ;
2003-10-27 22:24:33 +00:00
case 8 : iValue = stageStats . iTotalError [ p ]; break ;
2003-03-28 23:13:32 +00:00
default : iValue = 0 ; ASSERT ( 0 );
2003-03-28 05:47:42 +00:00
}
m_textJudgeNumbers [ l ][ p ]. SetText ( ssprintf ( "%4d" , iValue ) );
}
2002-09-10 08:21:55 +00:00
}
}
2003-03-24 21:37:13 +00:00
//
// init score area
//
2003-03-28 05:47:42 +00:00
if ( SHOW_SCORE_AREA )
2003-03-24 21:37:13 +00:00
{
2003-04-15 02:47:24 +00:00
m_sprScoreLabel . Load ( THEME -> GetPathToG ( "ScreenEvaluation score labels 1x2" ) );
m_sprScoreLabel . SetState ( 0 );
m_sprScoreLabel . StopAnimating ();
m_sprScoreLabel . SetName ( "ScoreLabel" );
UtilSetXYAndOnCommand ( m_sprScoreLabel , "ScreenEvaluation" );
this -> AddChild ( & m_sprScoreLabel );
2003-03-24 21:37:13 +00:00
2003-03-28 05:47:42 +00:00
for ( p = 0 ; p < NUM_PLAYERS ; p ++ )
{
if ( ! GAMESTATE -> IsPlayerEnabled ( ( PlayerNumber ) p ) )
continue ; // skip
2003-03-24 21:37:13 +00:00
2003-04-12 17:39:27 +00:00
m_textScore [ p ]. LoadFromNumbers ( THEME -> GetPathToN ( "ScreenEvaluation score" ) );
2003-03-28 23:13:32 +00:00
m_textScore [ p ]. EnableShadow ( false );
m_textScore [ p ]. SetDiffuse ( PlayerToColor ( p ) );
2003-04-15 02:47:24 +00:00
m_textScore [ p ]. SetName ( ssprintf ( "ScoreNumberP%d" , p + 1 ) );
UtilSetXYAndOnCommand ( m_textScore [ p ], "ScreenEvaluation" );
2003-06-18 20:08:39 +00:00
m_textScore [ p ]. SetText ( ssprintf ( "%*.0i" , NUM_SCORE_DIGITS , stageStats . iScore [ p ]) );
2003-03-28 23:13:32 +00:00
this -> AddChild ( & m_textScore [ p ] );
2003-03-28 05:47:42 +00:00
}
}
//
// init time area
//
if ( SHOW_TIME_AREA )
{
2003-04-12 17:39:27 +00:00
m_sprTimeLabel . Load ( THEME -> GetPathToG ( "ScreenEvaluation score labels 1x2" ) );
2003-03-28 05:47:42 +00:00
m_sprTimeLabel . SetState ( 1 );
m_sprTimeLabel . StopAnimating ();
2003-04-15 02:47:24 +00:00
m_sprTimeLabel . SetName ( "TimeLabel" );
UtilSetXYAndOnCommand ( m_sprTimeLabel , "ScreenEvaluation" );
2003-03-28 05:47:42 +00:00
this -> AddChild ( & m_sprTimeLabel );
for ( p = 0 ; p < NUM_PLAYERS ; p ++ )
{
if ( ! GAMESTATE -> IsPlayerEnabled ( ( PlayerNumber ) p ) )
continue ; // skip
2003-04-12 17:39:27 +00:00
m_textTime [ p ]. LoadFromNumbers ( THEME -> GetPathToN ( "ScreenEvaluation score" ) );
2003-03-28 23:13:32 +00:00
m_textTime [ p ]. EnableShadow ( false );
m_textTime [ p ]. SetDiffuse ( PlayerToColor ( p ) );
2003-04-15 02:47:24 +00:00
m_textTime [ p ]. SetName ( ssprintf ( "ScoreNumberP%d" , p + 1 ) );
UtilSetXYAndOnCommand ( m_textTime [ p ], "ScreenEvaluation" );
2003-03-28 23:13:32 +00:00
m_textTime [ p ]. SetText ( SecondsToTime ( stageStats . fAliveSeconds [ p ]) );
this -> AddChild ( & m_textTime [ p ] );
2003-03-28 05:47:42 +00:00
}
}
//
// init extra area
//
for ( p = 0 ; p < NUM_PLAYERS ; p ++ )
{
2003-10-19 21:38:11 +00:00
if ( iMachineHighScoreIndex [ p ] != - 1 )
2003-03-24 21:37:13 +00:00
{
2003-11-09 22:06:36 +00:00
switch ( m_Type )
{
case stage :
m_sprMachineRecord [ p ]. Load ( THEME -> GetPathToG ( "ScreenEvaluation machine record" ) );
m_sprMachineRecord [ p ]. SetName ( ssprintf ( "MachineRecordP%d" , p + 1 ) );
break ;
case summary :
m_sprMachineRecord [ p ]. Load ( THEME -> GetPathToG ( "ScreenEvaluation category record" ) );
m_sprMachineRecord [ p ]. SetName ( ssprintf ( "CategoryRecordP%d" , p + 1 ) );
break ;
case course :
m_sprMachineRecord [ p ]. Load ( THEME -> GetPathToG ( "ScreenEvaluation course record" ) );
m_sprMachineRecord [ p ]. SetName ( ssprintf ( "CourseRecordP%d" , p + 1 ) );
break ;
default :
ASSERT ( 0 );
}
2003-10-19 21:38:11 +00:00
m_sprMachineRecord [ p ]. SetState ( iMachineHighScoreIndex [ p ] );
m_sprMachineRecord [ p ]. StopAnimating ();
UtilSetXYAndOnCommand ( m_sprMachineRecord [ p ], "ScreenEvaluation" );
this -> AddChild ( & m_sprMachineRecord [ p ] );
}
if ( iPersonalHighScoreIndex [ p ] != - 1 )
{
m_sprPersonalRecord [ p ]. Load ( THEME -> GetPathToG ( "ScreenEvaluation personal record" ) );
m_sprPersonalRecord [ p ]. SetState ( iPersonalHighScoreIndex [ p ] );
m_sprPersonalRecord [ p ]. StopAnimating ();
m_sprPersonalRecord [ p ]. SetName ( ssprintf ( "PersonalRecordP%d" , p + 1 ) );
UtilSetXYAndOnCommand ( m_sprPersonalRecord [ p ], "ScreenEvaluation" );
this -> AddChild ( & m_sprPersonalRecord [ p ] );
2003-03-24 21:37:13 +00:00
}
2003-10-31 03:10:31 +00:00
if ( SHOW_FULL_COMBO && stageStats . FullCombo ( ( PlayerNumber ) p ) )
{
m_FullCombo [ p ]. Load ( THEME -> GetPathToG ( ssprintf ( "ScreenEvaluation full combo P%i" , p + 1 )) );
2003-10-31 03:53:12 +00:00
m_FullCombo [ p ] -> SetName ( ssprintf ( "FullComboP%d" , p + 1 ) );
UtilSetXYAndOnCommand ( m_FullCombo [ p ], "ScreenEvaluation" );
2003-10-31 03:10:31 +00:00
this -> AddChild ( m_FullCombo [ p ] );
}
2003-03-24 21:37:13 +00:00
}
2002-09-09 05:22:02 +00:00
2003-10-19 21:38:11 +00:00
bool bOneHasNewTopRecord = false ;
2002-09-09 05:22:02 +00:00
for ( p = 0 ; p < NUM_PLAYERS ; p ++ )
2003-10-19 23:12:51 +00:00
if ( GAMESTATE -> IsPlayerEnabled ( p ) && ( iMachineHighScoreIndex [ p ] != - 1 || iPersonalHighScoreIndex [ p ] != - 1 ) )
2003-10-19 21:38:11 +00:00
bOneHasNewTopRecord = true ;
2002-06-24 22:04:31 +00:00
2003-10-17 08:03:46 +00:00
if ( PREFSMAN -> m_bAllowExtraStage && m_bTryExtraStage )
2002-06-24 22:04:31 +00:00
{
2003-04-12 17:39:27 +00:00
m_sprTryExtraStage . Load ( THEME -> GetPathToG ( GAMESTATE -> IsExtraStage () ? "ScreenEvaluation try extra2" : "ScreenEvaluation try extra1" ) );
2003-04-15 02:47:24 +00:00
m_sprTryExtraStage . SetName ( "TryExtraStage" );
UtilSetXYAndOnCommand ( m_sprTryExtraStage , "ScreenEvaluation" );
2002-09-03 22:31:06 +00:00
this -> AddChild ( & m_sprTryExtraStage );
2002-06-24 22:04:31 +00:00
2003-03-12 01:26:44 +00:00
if ( GAMESTATE -> IsExtraStage () )
2003-07-26 22:53:22 +00:00
SOUND -> PlayOnce ( THEME -> GetPathToS ( "ScreenEvaluation try extra2" ) );
2003-03-12 01:26:44 +00:00
else
2003-07-26 22:53:22 +00:00
SOUND -> PlayOnce ( THEME -> GetPathToS ( "ScreenEvaluation try extra1" ) );
2002-06-24 22:04:31 +00:00
}
2003-10-19 21:38:11 +00:00
else if ( bOneHasNewTopRecord && ANNOUNCER -> HasSoundsFor ( "evaluation new record" ) )
2002-09-09 05:22:02 +00:00
{
2003-07-26 22:53:22 +00:00
SOUND -> PlayOnceFromDir ( ANNOUNCER -> GetPathTo ( "evaluation new record" ) );
2002-09-09 05:22:02 +00:00
}
2002-06-24 22:04:31 +00:00
else
2003-03-28 05:47:42 +00:00
{
2003-03-24 21:37:13 +00:00
switch ( m_Type )
2002-06-24 22:04:31 +00:00
{
2003-03-24 21:37:13 +00:00
case stage :
2003-05-13 13:35:32 +00:00
switch ( GAMESTATE -> m_PlayMode )
{
2003-08-19 04:27:50 +00:00
case PLAY_MODE_BATTLE :
2003-05-13 13:35:32 +00:00
{
2003-06-30 18:08:27 +00:00
bool bWon = GAMESTATE -> GetStageResult ( GAMESTATE -> m_MasterPlayerNumber ) == RESULT_WIN ;
2003-05-13 13:35:32 +00:00
if ( bWon )
2003-07-26 22:53:22 +00:00
SOUND -> PlayOnceFromDir ( ANNOUNCER -> GetPathTo ( "evaluation win" ) );
2003-05-13 13:35:32 +00:00
else
2003-07-26 22:53:22 +00:00
SOUND -> PlayOnceFromDir ( ANNOUNCER -> GetPathTo ( "evaluation lose" ) );
2003-05-13 13:35:32 +00:00
}
break ;
default :
2003-07-26 22:53:22 +00:00
SOUND -> PlayOnceFromDir ( ANNOUNCER -> GetPathTo ( "evaluation " + GradeToString ( max_grade )) );
2003-05-13 13:35:32 +00:00
break ;
}
2002-07-23 01:41:40 +00:00
break ;
2003-03-24 21:37:13 +00:00
case course :
case summary :
2003-07-26 22:53:22 +00:00
SOUND -> PlayOnceFromDir ( ANNOUNCER -> GetPathTo ( "evaluation final " + GradeToString ( max_grade )) );
2002-07-23 01:41:40 +00:00
break ;
2002-06-24 22:04:31 +00:00
default :
2002-07-23 01:41:40 +00:00
ASSERT ( 0 );
2002-06-24 22:04:31 +00:00
}
}
2002-10-18 19:01:32 +00:00
switch ( max_grade )
{
case GRADE_AA :
case GRADE_AAA :
2003-01-11 08:55:21 +00:00
case GRADE_AAAA :
2003-04-15 02:47:24 +00:00
this -> PostScreenMessage ( SM_PlayCheer , CHEER_DELAY_SECONDS );
2002-10-18 19:01:32 +00:00
break ;
}
2002-08-27 16:53:25 +00:00
2003-07-26 22:53:22 +00:00
SOUND -> PlayMusic ( THEME -> GetPathToS ( "ScreenEvaluation music" ) );
2003-05-11 22:19:40 +00:00
m_fScreenCreateTime = RageTimer :: GetTimeSinceStart ();
2002-06-24 22:04:31 +00:00
}
void ScreenEvaluation :: TweenOffScreen ()
{
2003-03-24 21:37:13 +00:00
int p ;
2002-06-24 22:04:31 +00:00
2003-03-28 05:47:42 +00:00
// large banner area
2003-04-15 02:47:24 +00:00
UtilOffCommand ( m_LargeBanner , "ScreenEvaluation" );
UtilOffCommand ( m_sprLargeBannerFrame , "ScreenEvaluation" );
UtilOffCommand ( m_sprStage , "ScreenEvaluation" );
2002-06-24 22:04:31 +00:00
for ( p = 0 ; p < NUM_PLAYERS ; p ++ )
{
2003-04-15 02:47:24 +00:00
if ( ! GAMESTATE -> IsPlayerEnabled ( p ) )
continue ;
UtilOffCommand ( m_DifficultyIcon [ p ], "ScreenEvaluation" );
UtilOffCommand ( m_textPlayerOptions [ p ], "ScreenEvaluation" );
2002-06-24 22:04:31 +00:00
}
2003-03-24 21:37:13 +00:00
2003-03-28 05:47:42 +00:00
// small banner area
2003-07-31 20:34:01 +00:00
for ( int i = 0 ; i < MAX_SONGS_TO_SHOW ; i ++ )
2003-03-28 05:47:42 +00:00
{
2003-04-15 02:47:24 +00:00
UtilOffCommand ( m_SmallBanner [ i ], "ScreenEvaluation" );
UtilOffCommand ( m_sprSmallBannerFrame [ i ], "ScreenEvaluation" );
2003-03-28 05:47:42 +00:00
}
2003-03-24 21:37:13 +00:00
// grade area
for ( p = 0 ; p < NUM_PLAYERS ; p ++ )
{
2003-04-15 02:47:24 +00:00
if ( ! GAMESTATE -> IsPlayerEnabled ( p ) )
continue ;
UtilOffCommand ( m_sprGradeFrame [ p ], "ScreenEvaluation" );
UtilOffCommand ( m_Grades [ p ], "ScreenEvaluation" );
2003-03-28 05:47:42 +00:00
}
2003-10-23 06:28:17 +00:00
if ( SHOW_GRAPH_AREA )
{
for ( p = 0 ; p < NUM_PLAYERS ; p ++ )
{
if ( ! GAMESTATE -> IsPlayerEnabled ( p ) )
continue ; // skip
OFF_COMMAND ( m_Graph [ p ] );
}
}
if ( SHOW_COMBO_AREA )
{
for ( p = 0 ; p < NUM_PLAYERS ; p ++ )
{
if ( ! GAMESTATE -> IsPlayerEnabled ( p ) )
continue ; // skip
OFF_COMMAND ( m_Combo [ p ] );
}
}
2003-03-28 05:47:42 +00:00
// points area
2003-10-07 02:13:48 +00:00
if ( SHOW_POINTS_AREA )
2003-03-28 05:47:42 +00:00
{
2003-10-07 02:13:48 +00:00
for ( p = 0 ; p < NUM_PLAYERS ; p ++ )
{
2003-10-13 04:43:36 +00:00
if ( ! GAMESTATE -> IsPlayerEnabled ( ( PlayerNumber ) p ) )
continue ; // skip
2003-10-07 02:13:48 +00:00
UtilOffCommand ( m_sprPercentFrame [ p ], "ScreenEvaluation" );
m_Percent [ p ]. Command ( THEME -> GetMetric ( "ScreenEvaluation" , ssprintf ( "PercentP%dOffCommand" , p + 1 )) );
m_Percent [ p ]. TweenOffScreen ();
}
2003-03-24 21:37:13 +00:00
}
// bonus area
2003-10-07 02:13:48 +00:00
if ( SHOW_BONUS_AREA )
2003-03-24 21:37:13 +00:00
{
2003-10-07 02:13:48 +00:00
for ( p = 0 ; p < NUM_PLAYERS ; p ++ )
2003-03-24 21:37:13 +00:00
{
2003-10-07 02:13:48 +00:00
if ( ! GAMESTATE -> IsPlayerEnabled ( p ) )
continue ;
UtilOffCommand ( m_sprBonusFrame [ p ], "ScreenEvaluation" );
for ( int r = 0 ; r < NUM_RADAR_CATEGORIES ; r ++ ) // foreach line
{
UtilOffCommand ( m_sprPossibleBar [ p ][ r ], "ScreenEvaluation" );
UtilOffCommand ( m_sprActualBar [ p ][ r ], "ScreenEvaluation" );
}
2003-03-24 21:37:13 +00:00
}
2003-03-28 05:47:42 +00:00
}
// survived area
2003-10-07 02:13:48 +00:00
if ( SHOW_SURVIVED_AREA )
2003-03-28 05:47:42 +00:00
{
2003-10-07 02:13:48 +00:00
for ( p = 0 ; p < NUM_PLAYERS ; p ++ )
{
if ( ! GAMESTATE -> IsPlayerEnabled ( p ) )
continue ;
UtilOffCommand ( m_sprSurvivedFrame [ p ], "ScreenEvaluation" );
UtilOffCommand ( m_textSurvivedNumber [ p ], "ScreenEvaluation" );
}
2003-04-15 02:47:24 +00:00
}
2003-10-07 02:13:48 +00:00
2003-04-15 02:47:24 +00:00
// win area
2003-10-07 02:13:48 +00:00
if ( SHOW_WIN_AREA )
2003-04-15 02:47:24 +00:00
{
2003-10-07 02:13:48 +00:00
for ( p = 0 ; p < NUM_PLAYERS ; p ++ )
{
if ( ! GAMESTATE -> IsPlayerEnabled ( p ) )
continue ;
UtilOffCommand ( m_sprWinFrame [ p ], "ScreenEvaluation" );
UtilOffCommand ( m_sprWin [ p ], "ScreenEvaluation" );
}
2003-03-24 21:37:13 +00:00
}
2003-10-07 02:13:48 +00:00
2003-03-24 21:37:13 +00:00
// judgement area
int l ;
for ( l = 0 ; l < NUM_JUDGE_LINES ; l ++ )
2003-10-07 02:13:48 +00:00
{
if ( ! SHOW_JUDGMENT ( l ) )
continue ;
2003-04-15 02:47:24 +00:00
UtilOffCommand ( m_sprJudgeLabels [ l ], "ScreenEvaluation" );
2003-03-24 21:37:13 +00:00
2003-10-07 02:13:48 +00:00
for ( p = 0 ; p < NUM_PLAYERS ; p ++ )
{
if ( ! GAMESTATE -> IsPlayerEnabled ( p ) )
continue ;
2003-04-15 02:47:24 +00:00
UtilOffCommand ( m_textJudgeNumbers [ l ][ p ], "ScreenEvaluation" );
2003-10-07 02:13:48 +00:00
}
2003-04-15 02:47:24 +00:00
}
2003-03-24 21:37:13 +00:00
// score area
2003-10-07 02:13:48 +00:00
if ( SHOW_SCORE_AREA )
2003-04-15 02:47:24 +00:00
{
2003-10-07 02:13:48 +00:00
UtilOffCommand ( m_sprScoreLabel , "ScreenEvaluation" );
for ( p = 0 ; p < NUM_PLAYERS ; p ++ )
{
if ( ! GAMESTATE -> IsPlayerEnabled ( p ) )
continue ;
UtilOffCommand ( m_textScore [ p ], "ScreenEvaluation" );
}
2003-04-15 02:47:24 +00:00
}
2003-03-28 05:47:42 +00:00
// time area
2003-10-07 02:13:48 +00:00
if ( SHOW_TIME_AREA )
2003-04-15 02:47:24 +00:00
{
2003-10-07 02:13:48 +00:00
UtilOffCommand ( m_sprTimeLabel , "ScreenEvaluation" );
for ( p = 0 ; p < NUM_PLAYERS ; p ++ )
{
if ( ! GAMESTATE -> IsPlayerEnabled ( p ) )
continue ;
UtilOffCommand ( m_textTime [ p ], "ScreenEvaluation" );
}
2003-04-15 02:47:24 +00:00
}
2003-03-28 05:47:42 +00:00
// extra area
2003-03-24 21:37:13 +00:00
for ( p = 0 ; p < NUM_PLAYERS ; p ++ )
2003-04-15 02:47:24 +00:00
{
if ( ! GAMESTATE -> IsPlayerEnabled ( p ) )
continue ;
2003-10-19 21:38:11 +00:00
UtilOffCommand ( m_sprMachineRecord [ p ], "ScreenEvaluation" );
UtilOffCommand ( m_sprPersonalRecord [ p ], "ScreenEvaluation" );
2003-10-31 03:53:12 +00:00
if ( m_FullCombo [ p ]. IsLoaded () )
UtilOffCommand ( m_FullCombo [ p ], "ScreenEvaluation" );
2003-04-15 02:47:24 +00:00
}
UtilOffCommand ( m_sprTryExtraStage , "ScreenEvaluation" );
2002-06-24 22:04:31 +00:00
}
void ScreenEvaluation :: Update ( float fDeltaTime )
{
Screen :: Update ( fDeltaTime );
2003-05-11 22:19:40 +00:00
2003-11-10 23:25:44 +00:00
if ( m_bFailed && m_Type == stage )
{
m_bgFailedBack . Update ( fDeltaTime );
m_bgFailedOverlay . Update ( fDeltaTime );
}
else if ( m_Type == stage )
m_bgPassedOverlay . Update ( fDeltaTime );
2003-08-11 12:14:26 +00:00
for ( int p = 0 ; p < NUM_PLAYERS ; p ++ )
{
if ( GAMESTATE -> m_CurStageStats . iBonus [ p ] == 0 )
continue ;
2003-08-14 19:46:22 +00:00
if ( GAMESTATE -> IsCourseMode ())
continue ;
2003-08-11 12:14:26 +00:00
// wait a few seconds before adding bonus
2003-08-11 20:59:02 +00:00
if ( RageTimer :: GetTimeSinceStart () - m_fScreenCreateTime < 1.5f )
2003-08-11 12:14:26 +00:00
continue ;
int increment = GAMESTATE -> m_CurStageStats . iBonus [ p ] / 10 ;
2003-08-11 20:59:02 +00:00
if ( increment < 1 )
increment = min ( 1024 , GAMESTATE -> m_CurStageStats . iBonus [ p ]);
2003-08-11 12:14:26 +00:00
GAMESTATE -> m_CurStageStats . iBonus [ p ] -= increment ;
GAMESTATE -> m_CurStageStats . iScore [ p ] += increment ;
2003-10-07 02:13:48 +00:00
if ( SHOW_SCORE_AREA )
m_textScore [ p ]. SetText ( ssprintf ( "%*.0i" , NUM_SCORE_DIGITS , GAMESTATE -> m_CurStageStats . iScore [ p ]) );
2003-08-11 12:14:26 +00:00
}
2003-05-22 01:34:03 +00:00
/* for( int l=0; l<NUM_JUDGE_LINES; l++ )
2003-05-11 22:19:40 +00:00
{
2003-05-12 01:01:22 +00:00
if(!SHOW_JUDGMENT(l))
continue;
if(m_TimeToPlayJudgeSound[l] == -1)
continue;
2003-05-12 01:02:11 +00:00
if(RageTimer::GetTimeSinceStart() < m_fScreenCreateTime + m_TimeToPlayJudgeSound[l])
continue;
2003-05-12 01:04:28 +00:00
if(SOUND_ON_FULL_ALPHA)
2003-05-11 22:19:40 +00:00
{
2003-05-12 01:04:28 +00:00
if( m_sprJudgeLabels[l].GetDiffuse().a != 1.0f &&
m_textJudgeNumbers[l][PLAYER_1].GetDiffuse().a != 1.0f &&
m_textJudgeNumbers[l][PLAYER_2].GetDiffuse().a != 1.0f )
continue;
2003-05-11 22:19:40 +00:00
}
2003-05-12 01:02:11 +00:00
2003-05-12 01:04:28 +00:00
m_soundJudgeSound[l].Play();
m_TimeToPlayJudgeSound[l] = -1;
2003-05-22 01:34:03 +00:00
}*/
2002-06-24 22:04:31 +00:00
}
void ScreenEvaluation :: DrawPrimitives ()
{
m_Menu . DrawBottomLayer ();
2003-11-10 23:25:44 +00:00
// draw the failed background here if the player(s) failed
if ( m_bFailed && m_Type == stage )
m_bgFailedBack . Draw ();
2002-06-24 22:04:31 +00:00
Screen :: DrawPrimitives ();
2003-11-10 23:25:44 +00:00
// draw the pass / failed overlays here respectively
if ( m_bFailed && m_Type == stage )
m_bgFailedOverlay . Draw ();
else if ( m_Type == stage )
m_bgPassedOverlay . Draw ();
2002-06-24 22:04:31 +00:00
m_Menu . DrawTopLayer ();
}
void ScreenEvaluation :: Input ( const DeviceInput & DeviceI , const InputEventType type , const GameInput & GameI , const MenuInput & MenuI , const StyleInput & StyleI )
{
2002-09-06 00:33:51 +00:00
// LOG->Trace( "ScreenEvaluation::Input()" );
2002-06-24 22:04:31 +00:00
2003-03-09 00:55:49 +00:00
if ( m_Menu . IsTransitioning () )
2002-06-24 22:04:31 +00:00
return ;
Screen :: Input ( DeviceI , type , GameI , MenuI , StyleI );
}
void ScreenEvaluation :: HandleScreenMessage ( const ScreenMessage SM )
{
switch ( SM )
{
case SM_MenuTimer :
MenuStart ( PLAYER_INVALID );
break ;
2003-03-28 05:47:42 +00:00
case SM_GoToNextScreen :
2003-11-11 18:05:28 +00:00
if ( m_bFailed && ! PREFSMAN -> m_bEventMode && ! ( GAMESTATE -> IsExtraStage () || GAMESTATE -> IsExtraStage2 ()) && GAMESTATE -> m_PlayMode == PLAY_MODE_ARCADE ) // if failed and not in event mode go to gameover screen
2003-11-10 23:25:44 +00:00
SCREENMAN -> SetNewScreen ( FAILED_SCREEN );
else
SCREENMAN -> SetNewScreen ( NEXT_SCREEN );
2002-06-27 17:49:10 +00:00
break ;
2002-08-01 05:11:11 +00:00
case SM_GoToSelectCourse :
2002-08-27 03:59:22 +00:00
SCREENMAN -> SetNewScreen ( "ScreenSelectCourse" );
2002-08-01 05:11:11 +00:00
break ;
2003-03-28 05:47:42 +00:00
case SM_GoToEndScreen :
2003-11-11 18:05:28 +00:00
if ( m_bFailed && ! PREFSMAN -> m_bEventMode && ! ( GAMESTATE -> IsExtraStage () || GAMESTATE -> IsExtraStage2 ()) && GAMESTATE -> m_PlayMode == PLAY_MODE_ARCADE ) // if failed and not in event mode go to gameover screen
2003-11-10 23:25:44 +00:00
SCREENMAN -> SetNewScreen ( FAILED_SCREEN );
else
SCREENMAN -> SetNewScreen ( END_SCREEN );
2002-06-27 17:49:10 +00:00
break ;
2003-10-15 01:05:20 +00:00
// case SM_GoToEvaluationSummary:
// SCREENMAN->SetNewScreen( "ScreenEvaluationSummary" );
// break;
2002-10-18 19:01:32 +00:00
case SM_PlayCheer :
2003-07-26 22:53:22 +00:00
SOUND -> PlayOnceFromDir ( ANNOUNCER -> GetPathTo ( "evaluation cheer" ) );
2002-10-18 19:01:32 +00:00
break ;
2002-06-24 22:04:31 +00:00
}
}
2002-12-21 10:04:25 +00:00
void ScreenEvaluation :: MenuLeft ( PlayerNumber pn )
{
2003-01-24 02:43:07 +00:00
// What is the purpose of this? I keep my feet on the pads and
// was wondering why the grades weren't spinning. -Chris
2003-01-24 22:21:48 +00:00
// To be able to see the grade without having to wait for it to
// stop spinning. (I was hitting left repeatedly and wondering
// why it kept spinning ...)
2003-01-24 02:43:07 +00:00
//m_Grades[pn].SettleQuickly();
2002-12-21 10:04:25 +00:00
}
void ScreenEvaluation :: MenuRight ( PlayerNumber pn )
{
2003-01-24 02:43:07 +00:00
// What is the purpose of this? I keep my feet on the pads and
// was wondering why the grades weren't spinning. -Chris
//m_Grades[pn].SettleQuickly();
2002-12-21 10:04:25 +00:00
}
2002-09-04 03:49:08 +00:00
void ScreenEvaluation :: MenuBack ( PlayerNumber pn )
2002-06-24 22:04:31 +00:00
{
2002-09-04 03:49:08 +00:00
MenuStart ( pn );
2002-06-24 22:04:31 +00:00
}
2002-09-04 03:49:08 +00:00
void ScreenEvaluation :: MenuStart ( PlayerNumber pn )
2002-06-24 22:04:31 +00:00
{
TweenOffScreen ();
2003-03-25 22:23:58 +00:00
for ( int p = 0 ; p < NUM_PLAYERS ; p ++ )
m_Grades [ p ]. SettleImmediately ();
2003-07-30 20:34:16 +00:00
GAMESTATE -> m_iRoundSeed = rand ();
2003-03-25 22:23:58 +00:00
2003-04-19 19:05:25 +00:00
if ( PREFSMAN -> m_bEventMode )
2002-06-29 11:59:09 +00:00
{
2003-05-05 04:13:39 +00:00
m_Menu . StartTransitioning ( SM_GoToNextScreen );
2002-06-29 11:59:09 +00:00
}
2002-08-01 05:11:11 +00:00
else // not event mode
2002-06-27 17:49:10 +00:00
{
2003-03-24 21:37:13 +00:00
switch ( m_Type )
2002-12-19 20:01:53 +00:00
{
2003-03-24 21:37:13 +00:00
case stage :
2003-02-11 02:44:26 +00:00
if ( m_bTryExtraStage )
{
2003-03-28 05:47:42 +00:00
m_Menu . StartTransitioning ( SM_GoToNextScreen );
2003-02-11 02:44:26 +00:00
}
else if ( GAMESTATE -> IsFinalStage () || GAMESTATE -> IsExtraStage () || GAMESTATE -> IsExtraStage2 () )
2003-01-27 06:49:02 +00:00
{
/* Tween the screen out, but leave the MenuElements where they are.
2003-02-11 02:44:26 +00:00
* Play the "swoosh" sound manually (would normally be played by the ME
* tween out). */
2003-01-27 06:49:02 +00:00
TweenOffScreen ();
2003-10-15 01:05:20 +00:00
m_Menu . StartTransitioning ( SM_GoToEndScreen );
2003-01-27 06:49:02 +00:00
}
2003-02-10 05:30:12 +00:00
else
{
2003-03-28 05:47:42 +00:00
m_Menu . StartTransitioning ( SM_GoToNextScreen );
2003-02-10 05:30:12 +00:00
}
2003-02-11 02:44:26 +00:00
break ;
2003-03-24 21:37:13 +00:00
case summary :
2003-03-28 05:47:42 +00:00
m_Menu . StartTransitioning ( SM_GoToEndScreen );
2003-02-11 02:44:26 +00:00
break ;
2003-03-24 21:37:13 +00:00
case course :
2003-03-28 05:47:42 +00:00
m_Menu . StartTransitioning ( SM_GoToEndScreen );
2003-02-11 02:44:26 +00:00
break ;
}
2002-06-27 17:49:10 +00:00
}
2003-03-24 21:37:13 +00:00
switch ( m_Type )
2003-02-03 05:53:59 +00:00
{
2003-03-24 21:37:13 +00:00
case stage :
2003-02-10 05:30:12 +00:00
// Increment the stage counter.
int iNumStagesOfLastSong ;
iNumStagesOfLastSong = SongManager :: GetNumStagesForSong ( GAMESTATE -> m_pCurSong );
2003-09-21 00:17:34 +00:00
if ( GAMESTATE -> IsExtraStage () || GAMESTATE -> IsExtraStage2 () )
{
/* XXX: If it's an extra stage, always increment by one. This is because
* in some unusual cases we can pick a long or marathon song as an extra
* stage. The most common cause of this is when an entire group of songs
* is long/nonstop mixes.
*
* We can't simply not choose long songs as extra stages: if there are no
* regular songs to choose, we'll end up with no song to use as an extra stage. */
iNumStagesOfLastSong = 1 ;
}
2003-02-10 05:30:12 +00:00
GAMESTATE -> m_iCurrentStageIndex += iNumStagesOfLastSong ;
2003-02-03 05:53:59 +00:00
2003-09-06 01:35:29 +00:00
// save current stage stats
2003-09-06 01:37:30 +00:00
GAMESTATE -> m_vPlayedStageStats . push_back ( GAMESTATE -> m_CurStageStats ); // Save this stage's stats
2003-02-03 05:53:59 +00:00
break ;
}
2002-06-24 22:04:31 +00:00
}