allow setting courses

fix setting steps not working if the song was previously set
This commit is contained in:
Glenn Maynard
2004-04-30 07:46:46 +00:00
parent 9948172998
commit f013cbf3f8
2 changed files with 34 additions and 2 deletions
+31 -2
View File
@@ -29,6 +29,7 @@ void ModeChoice::Init()
m_sScreen = "";
m_pSong = NULL;
m_pSteps = NULL;
m_pCourse = NULL;
m_pCharacter = NULL;
m_CourseDifficulty = COURSE_DIFFICULTY_INVALID;
}
@@ -170,7 +171,10 @@ void ModeChoice::Load( int iIndex, CString sChoice )
{
m_pSong = SONGMAN->FindSong( sValue );
if( m_pSong == NULL )
{
m_sInvalidReason = ssprintf( "Song \"%s\" not found", sValue.c_str() );
m_bInvalid |= true;
}
}
if( sName == "steps" )
@@ -180,18 +184,37 @@ void ModeChoice::Load( int iIndex, CString sChoice )
sSteps = sValue;
}
if( sName == "course" )
{
m_pCourse = SONGMAN->FindCourse( sValue );
if( m_pCourse == NULL )
{
m_sInvalidReason = ssprintf( "Course \"%s\" not found", sValue.c_str() );
m_bInvalid |= true;
}
}
if( sName == "screen" )
m_sScreen = sValue;
}
if( !m_bInvalid && sSteps != "" )
{
if( m_pSong == NULL || m_style == STYLE_INVALID )
Song *pSong = (m_pSong != NULL)? m_pSong:GAMESTATE->m_pCurSong;
Style style = (m_style != STYLE_INVALID)? m_style:GAMESTATE->m_CurStyle;
if( pSong == NULL || style == STYLE_INVALID )
RageException::Throw( "Must set Song and Style to set Steps" );
m_pSteps = m_pSong->GetStepsByDescription( GAMEMAN->GetStyleDefForStyle(m_style)->m_StepsType, sSteps );
Difficulty dc = StringToDifficulty( sSteps );
if( dc != DIFFICULTY_EDIT )
m_pSteps = pSong->GetStepsByDifficulty( GAMEMAN->GetStyleDefForStyle(style)->m_StepsType, dc );
else
m_pSteps = pSong->GetStepsByDescription( GAMEMAN->GetStyleDefForStyle(style)->m_StepsType, sSteps );
if( m_pSteps == NULL )
{
m_sInvalidReason = "steps not found";
m_bInvalid |= true;
}
}
}
@@ -238,7 +261,11 @@ static bool AreStyleAndPlayModeCompatible( Style style, PlayMode pm )
bool ModeChoice::IsPlayable( CString *why ) const
{
if( m_bInvalid )
{
if( *why )
*why = m_sInvalidReason;
return false;
}
if ( m_style != STYLE_INVALID )
{
@@ -348,6 +375,8 @@ void ModeChoice::Apply( PlayerNumber pn ) const
GAMESTATE->m_pCurSong = m_pSong;
if( m_pSteps )
GAMESTATE->m_pCurNotes[pn] = m_pSteps;
if( m_pCourse )
GAMESTATE->m_pCurCourse = m_pCourse;
if( m_pCharacter )
GAMESTATE->m_pCurCharacters[pn] = m_pCharacter;
if( m_CourseDifficulty != COURSE_DIFFICULTY_INVALID )
+3
View File
@@ -18,6 +18,7 @@
class Song;
class Steps;
class Course;
class Character;
struct ModeChoice // used in SelectMode
@@ -35,6 +36,7 @@ struct ModeChoice // used in SelectMode
CString m_sName; // display name
bool m_bInvalid;
CString m_sInvalidReason;
int m_iIndex;
Game m_game;
Style m_style;
@@ -45,6 +47,7 @@ struct ModeChoice // used in SelectMode
CString m_sScreen;
Song* m_pSong;
Steps* m_pSteps;
Course* m_pCourse;
Character* m_pCharacter;
CourseDifficulty m_CourseDifficulty;
};