more work on course editor

This commit is contained in:
Chris Danford
2005-08-03 03:28:13 +00:00
parent 843e2a9c91
commit fcae1e142c
6 changed files with 73 additions and 16 deletions
+6
View File
@@ -9,6 +9,7 @@
#include "GameState.h" #include "GameState.h"
#include "Style.h" #include "Style.h"
#include "Foreach.h" #include "Foreach.h"
#include "GameState.h"
// //
@@ -188,6 +189,11 @@ void CourseUtil::SortByMostRecentlyPlayedForMachine( vector<Course*> &vpCoursesI
course_sort_val.clear(); course_sort_val.clear();
} }
void CourseUtil::MakeDefaultEditCourseEntry( CourseEntry& out )
{
out.pSong = GAMESTATE->GetDefaultSong();
out.baseDifficulty = DIFFICULTY_MEDIUM;
}
////////////////////////////////// //////////////////////////////////
+3
View File
@@ -8,6 +8,7 @@
class Course; class Course;
class Profile; class Profile;
struct XNode; struct XNode;
class CourseEntry;
namespace CourseUtil namespace CourseUtil
{ {
@@ -22,6 +23,8 @@ namespace CourseUtil
void SortByMostRecentlyPlayedForMachine( vector<Course*> &vpCoursesInOut ); void SortByMostRecentlyPlayedForMachine( vector<Course*> &vpCoursesInOut );
void MoveRandomToEnd( vector<Course*> &vpCoursesInOut ); void MoveRandomToEnd( vector<Course*> &vpCoursesInOut );
void MakeDefaultEditCourseEntry( CourseEntry &out );
}; };
class CourseID class CourseID
+1 -1
View File
@@ -57,7 +57,7 @@ SortOrder GetDefaultSort()
return StringToSortOrder( DEFAULT_SORT ); return StringToSortOrder( DEFAULT_SORT );
} }
ThemeMetric<CString> DEFAULT_SONG ("GameState","DefaultSong"); ThemeMetric<CString> DEFAULT_SONG ("GameState","DefaultSong");
Song* GetDefaultSong() Song* GameState::GetDefaultSong() const
{ {
SongID sid; SongID sid;
sid.LoadFromDir( DEFAULT_SONG ); sid.LoadFromDir( DEFAULT_SONG );
+1
View File
@@ -42,6 +42,7 @@ public:
void PlayersFinalized(); // called after a style is chosen, which means the number of players is finalized void PlayersFinalized(); // called after a style is chosen, which means the number of players is finalized
void EndGame(); // called on ScreenGameOver, ScreenMusicScroll, ScreenCredits void EndGame(); // called on ScreenGameOver, ScreenMusicScroll, ScreenCredits
void SaveCurrentSettingsToProfile( PlayerNumber pn ); // called at the beginning of each stage void SaveCurrentSettingsToProfile( PlayerNumber pn ); // called at the beginning of each stage
Song* GetDefaultSong() const;
void Update( float fDelta ); void Update( float fDelta );
+7 -2
View File
@@ -9,6 +9,7 @@
#include "song.h" #include "song.h"
#include "ScreenMiniMenu.h" #include "ScreenMiniMenu.h"
#include "ScreenPrompt.h" #include "ScreenPrompt.h"
#include "CourseUtil.h"
enum EditCourseRow enum EditCourseRow
{ {
@@ -140,7 +141,9 @@ void ScreenOptionsEditCourse::HandleScreenMessage( const ScreenMessage SM )
ScreenPrompt::Prompt( SM_None, sError ); ScreenPrompt::Prompt( SM_None, sError );
return; return;
} }
pCourse->m_vEntries.insert( pCourse->m_vEntries.begin() + GetCourseEntryIndexWithFocus(), CourseEntry() ); CourseEntry ce;
CourseUtil::MakeDefaultEditCourseEntry( ce );
pCourse->m_vEntries.insert( pCourse->m_vEntries.begin() + GetCourseEntryIndexWithFocus(), ce );
SCREENMAN->SetNewScreen( this->m_sName ); // reload SCREENMAN->SetNewScreen( this->m_sName ); // reload
} }
break; break;
@@ -252,7 +255,9 @@ void ScreenOptionsEditCourse::ProcessMenuStart( PlayerNumber pn, const InputEven
ScreenPrompt::Prompt( SM_None, sError ); ScreenPrompt::Prompt( SM_None, sError );
return; return;
} }
pCourse->m_vEntries.push_back( CourseEntry() ); CourseEntry ce;
CourseUtil::MakeDefaultEditCourseEntry( ce );
pCourse->m_vEntries.push_back( ce );
GAMESTATE->m_iEditCourseEntryIndex.Set( pCourse->m_vEntries.size()-1 ); GAMESTATE->m_iEditCourseEntryIndex.Set( pCourse->m_vEntries.size()-1 );
SCREENMAN->SetNewScreen( this->m_sName ); // reload SCREENMAN->SetNewScreen( this->m_sName ); // reload
} }
+55 -13
View File
@@ -10,6 +10,7 @@
#include "ScreenMiniMenu.h" #include "ScreenMiniMenu.h"
#include "GameManager.h" #include "GameManager.h"
#include "Difficulty.h" #include "Difficulty.h"
#include "CourseUtil.h"
static void RefreshTrail() static void RefreshTrail()
{ {
@@ -82,7 +83,8 @@ void ScreenOptionsEditCourseSubMenu::MenuSelect( PlayerNumber pn, const InputEve
AutoScreenMessage( SM_BackFromEnterName ) AutoScreenMessage( SM_BackFromEnterNameForNew )
AutoScreenMessage( SM_BackFromRename )
AutoScreenMessage( SM_BackFromDeleteConfirm ) AutoScreenMessage( SM_BackFromDeleteConfirm )
AutoScreenMessage( SM_BackFromContextMenu ) AutoScreenMessage( SM_BackFromContextMenu )
@@ -105,6 +107,28 @@ static MenuDef g_TempMenu(
"ScreenMiniMenuContext" "ScreenMiniMenuContext"
); );
static bool ValidateEditCourseName( const CString &sAnswer, CString &sErrorOut )
{
if( sAnswer.empty() )
return false;
// Course name must be unique
vector<Course*> v;
SONGMAN->GetAllCourses( v, false );
FOREACH_CONST( Course*, v, c )
{
if( GAMESTATE->m_pCurCourse.Get() == *c )
continue; // don't comepare name against ourself
if( (*c)->GetDisplayFullTitle() == sAnswer )
return false;
}
return true;
}
REGISTER_SCREEN_CLASS( ScreenOptionsManageCourses ); REGISTER_SCREEN_CLASS( ScreenOptionsManageCourses );
ScreenOptionsManageCourses::ScreenOptionsManageCourses( CString sName ) : ScreenOptionsEditCourseSubMenu( sName ) ScreenOptionsManageCourses::ScreenOptionsManageCourses( CString sName ) : ScreenOptionsEditCourseSubMenu( sName )
{ {
@@ -212,7 +236,7 @@ void ScreenOptionsManageCourses::HandleScreenMessage( const ScreenMessage SM )
return; // don't call base return; // don't call base
} }
} }
else if( SM == SM_BackFromEnterName ) else if( SM == SM_BackFromEnterNameForNew )
{ {
if( !ScreenTextEntry::s_bCancelledLast ) if( !ScreenTextEntry::s_bCancelledLast )
{ {
@@ -225,8 +249,9 @@ void ScreenOptionsManageCourses::HandleScreenMessage( const ScreenMessage SM )
Course *pCourse = new Course; Course *pCourse = new Course;
pCourse->m_sMainTitle = ScreenTextEntry::s_sLastAnswer; pCourse->m_sMainTitle = ScreenTextEntry::s_sLastAnswer;
pCourse->SetLoadedFromProfile( PROFILE_SLOT_MACHINE ); pCourse->SetLoadedFromProfile( PROFILE_SLOT_MACHINE );
pCourse->m_vEntries.push_back( CourseEntry() ); // one blank entry CourseEntry ce;
pCourse->m_vEntries[0].baseDifficulty = DIFFICULTY_MEDIUM; CourseUtil::MakeDefaultEditCourseEntry( ce );
pCourse->m_vEntries.push_back( ce );
SONGMAN->AddCourse( pCourse ); SONGMAN->AddCourse( pCourse );
GAMESTATE->m_pCurCourse.Set( pCourse ); GAMESTATE->m_pCurCourse.Set( pCourse );
@@ -235,6 +260,17 @@ void ScreenOptionsManageCourses::HandleScreenMessage( const ScreenMessage SM )
this->HandleScreenMessage( SM_GoToNextScreen ); this->HandleScreenMessage( SM_GoToNextScreen );
} }
} }
else if( SM == SM_BackFromRename )
{
if( !ScreenTextEntry::s_bCancelledLast )
{
ASSERT( ScreenTextEntry::s_sLastAnswer != "" ); // validate should have assured this
GAMESTATE->m_pCurCourse->m_sMainTitle = ScreenTextEntry::s_sLastAnswer;
SCREENMAN->SetNewScreen( this->m_sName ); // reload
}
}
else if( SM == SM_BackFromDeleteConfirm ) else if( SM == SM_BackFromDeleteConfirm )
{ {
if( ScreenPrompt::s_LastAnswer == ANSWER_YES ) if( ScreenPrompt::s_LastAnswer == ANSWER_YES )
@@ -261,13 +297,12 @@ void ScreenOptionsManageCourses::HandleScreenMessage( const ScreenMessage SM )
break; break;
case CourseAction_Rename: case CourseAction_Rename:
{ {
CString sCurrentProfileName = "New Course";
ScreenTextEntry::TextEntry( ScreenTextEntry::TextEntry(
SM_BackFromEnterName, SM_BackFromRename,
"Enter a name for a new course.", "Enter a name for the course.",
sCurrentProfileName, GAMESTATE->m_pCurCourse->GetDisplayFullTitle(),
MAX_EDIT_COURSE_TITLE_LENGTH, MAX_EDIT_COURSE_TITLE_LENGTH,
SongManager::ValidateEditCourseName ); ValidateEditCourseName );
} }
break; break;
case CourseAction_Delete: case CourseAction_Delete:
@@ -301,13 +336,20 @@ void ScreenOptionsManageCourses::ProcessMenuStart( PlayerNumber pn, const InputE
if( iCurRow == 0 ) // "create new" if( iCurRow == 0 ) // "create new"
{ {
CString sCurrentProfileName = "New Course"; CString sDefaultName;
CString sThrowAway;
for( int i=1; i<=9999; i++ )
{
sDefaultName = ssprintf( "NewCourse%04d", i );
if( ValidateEditCourseName(sDefaultName,sThrowAway) )
break;
}
ScreenTextEntry::TextEntry( ScreenTextEntry::TextEntry(
SM_BackFromEnterName, SM_BackFromEnterNameForNew,
"Enter a name for a new course.", "Enter a name for a new course.",
sCurrentProfileName, sDefaultName,
MAX_EDIT_COURSE_TITLE_LENGTH, MAX_EDIT_COURSE_TITLE_LENGTH,
SongManager::ValidateEditCourseName ); ValidateEditCourseName );
} }
else if( iCurRow == (int)m_pRows.size()-1 ) // "done" else if( iCurRow == (int)m_pRows.size()-1 ) // "done"
{ {