From 7a1d7366948bf9299214f9cb84897bc7d3528ced Mon Sep 17 00:00:00 2001 From: Chris Danford Date: Sun, 26 Jun 2005 21:31:07 +0000 Subject: [PATCH] working on new course editor --- stepmania/src/Course.cpp | 12 + stepmania/src/Course.h | 18 +- stepmania/src/EditCoursesMenu.cpp | 4 +- stepmania/src/EditCoursesSongMenu.cpp | 4 +- stepmania/src/GameState.cpp | 6 +- stepmania/src/GameState.h | 3 + stepmania/src/MessageManager.cpp | 2 + stepmania/src/MessageManager.h | 2 + stepmania/src/OptionRow.cpp | 6 +- stepmania/src/ScreenCourseManager.cpp | 93 ++++++-- stepmania/src/ScreenCourseManager.h | 5 +- stepmania/src/ScreenEditCourse.cpp | 293 +++++++++++++++--------- stepmania/src/ScreenEditCourse.h | 7 +- stepmania/src/ScreenEditCourseEntry.cpp | 288 +++++++++++++++++++++++ stepmania/src/ScreenEditCourseEntry.h | 51 +++++ stepmania/src/ScreenOptions.cpp | 13 +- stepmania/src/ScreenOptions.h | 2 + stepmania/src/StepMania-net2003.vcproj | 24 +- stepmania/src/StepMania.dsp | 44 ++-- stepmania/src/StepMania.vcproj | 18 ++ 20 files changed, 705 insertions(+), 190 deletions(-) create mode 100644 stepmania/src/ScreenEditCourseEntry.cpp create mode 100644 stepmania/src/ScreenEditCourseEntry.h diff --git a/stepmania/src/Course.cpp b/stepmania/src/Course.cpp index b423d47556..724a6c7541 100644 --- a/stepmania/src/Course.cpp +++ b/stepmania/src/Course.cpp @@ -22,6 +22,18 @@ #include "UnlockManager.h" #include + +static const CString CourseEntryTypeNames[] = { + "Fixed", + "Random", + "RandomWithinGroup", + "Best", + "Worst", +}; +XToString( CourseEntryType, NUM_CourseEntryType ); +XToThemedString( CourseEntryType, NUM_CourseEntryType ); + + /* Amount to increase meter ranges to make them difficult: */ const int COURSE_DIFFICULTY_CLASS_CHANGE[NUM_DIFFICULTIES] = { -1, -1, 0, 1, 1 }; diff --git a/stepmania/src/Course.h b/stepmania/src/Course.h index 85ea3bd8f7..b247cda2cd 100644 --- a/stepmania/src/Course.h +++ b/stepmania/src/Course.h @@ -31,6 +31,7 @@ enum CourseType inline PlayMode CourseTypeToPlayMode( CourseType ct ) { return (PlayMode)(PLAY_MODE_NONSTOP+ct); } inline CourseType PlayModeToCourseType( PlayMode pm ) { return (CourseType)(pm-PLAY_MODE_NONSTOP); } + enum CourseEntryType { COURSE_ENTRY_FIXED, @@ -38,21 +39,12 @@ enum CourseEntryType COURSE_ENTRY_RANDOM_WITHIN_GROUP, COURSE_ENTRY_BEST, COURSE_ENTRY_WORST, - NUM_COURSE_ENTRY_TYPES // leave this at the end + NUM_CourseEntryType // leave this at the end }; +#define FOREACH_CourseEntryType( i ) FOREACH_ENUM( CourseEntryType, NUM_CourseEntryType, i ) +const CString &CourseEntryTypeToString( CourseEntryType cet ); +const CString &CourseEntryTypeToThemedString( CourseEntryType cet ); -inline CString CourseEntryTypeToString( CourseEntryType cet ) -{ - switch( cet ) - { - case COURSE_ENTRY_FIXED: return "fixed"; - case COURSE_ENTRY_RANDOM: return "random"; - case COURSE_ENTRY_RANDOM_WITHIN_GROUP: return "random_within_group"; - case COURSE_ENTRY_BEST: return "best"; - case COURSE_ENTRY_WORST: return "worst"; - default: ASSERT(0); return ""; - } -} class CourseEntry { diff --git a/stepmania/src/EditCoursesMenu.cpp b/stepmania/src/EditCoursesMenu.cpp index 98d970aa85..f4927f727c 100644 --- a/stepmania/src/EditCoursesMenu.cpp +++ b/stepmania/src/EditCoursesMenu.cpp @@ -63,7 +63,7 @@ enum CourseOptionsMenuRow -const bool g_bRowEnabledForType[NUM_COURSE_ENTRY_TYPES][NUM_ENTRY_OPTIONS_MENU_ROWS] = +const bool g_bRowEnabledForType[NUM_CourseEntryType][NUM_ENTRY_OPTIONS_MENU_ROWS] = { // song, group, difficulty, low_meter, high_meter, best_worst /* fixed */ { true, false, true, true, true, false }, /* random */ { false, false, true, true, true, false }, @@ -174,7 +174,7 @@ bool EditCoursesMenu::CanGoRight() 1, NUM_ACTIONS, (int)GetSelectedCourse()->m_entries.size(), - NUM_COURSE_ENTRY_TYPES, + NUM_CourseEntryType, 1, 1, 1 diff --git a/stepmania/src/EditCoursesSongMenu.cpp b/stepmania/src/EditCoursesSongMenu.cpp index 6823dc9097..ea7b818586 100644 --- a/stepmania/src/EditCoursesSongMenu.cpp +++ b/stepmania/src/EditCoursesSongMenu.cpp @@ -16,7 +16,7 @@ #define ROW_Y( i ) THEME->GetMetricF("EditCoursesSongMenu",ssprintf("Row%dY",i+1)) -const bool g_bRowEnabledForType[NUM_COURSE_ENTRY_TYPES][EditCoursesSongMenu::NUM_ROWS] = +const bool g_bRowEnabledForType[NUM_CourseEntryType][EditCoursesSongMenu::NUM_ROWS] = { // group, song, type, difficulty, low_meter, high_meter, best_worst /* fixed */ { true, true, true, true, true, true, false }, /* random */ { false, false, true, true, true, true, false }, @@ -79,7 +79,7 @@ bool EditCoursesSongMenu::CanGoRight() { m_aGroups.size(), m_aSongs.size(), - NUM_COURSE_ENTRY_TYPES, + NUM_CourseEntryType, NUM_DIFFICULTIES+1, 11, 11, diff --git a/stepmania/src/GameState.cpp b/stepmania/src/GameState.cpp index 8adbcd2faf..653e60a0dc 100644 --- a/stepmania/src/GameState.cpp +++ b/stepmania/src/GameState.cpp @@ -74,7 +74,9 @@ GameState::GameState() : m_pCurTrail( MESSAGE_CURRENT_TRAIL_P1_CHANGED ), m_stEdit( MESSAGE_EDIT_STEPS_TYPE_CHANGED ), m_pEditSourceSteps( MESSAGE_EDIT_SOURCE_STEPS_CHANGED ), - m_stEditSource( MESSAGE_EDIT_SOURCE_STEPS_TYPE_CHANGED ) + m_stEditSource( MESSAGE_EDIT_SOURCE_STEPS_TYPE_CHANGED ), + m_iEditCourseEntryIndex(MESSAGE_EDIT_COURSE_ENTRY_INDEX_CHANGED ), + m_EditCourseEntryAction(MESSAGE_EDIT_COURSE_ENTRY_ACTION_CHANGED ) { m_pCurStyle.Set( NULL ); @@ -252,6 +254,8 @@ void GameState::Reset() m_stEdit.Set( STEPS_TYPE_INVALID ); m_pEditSourceSteps.Set( NULL ); m_stEditSource.Set( STEPS_TYPE_INVALID ); + m_iEditCourseEntryIndex.Set( -1 ); + m_EditCourseEntryAction.Set( ACTION_EDIT ); ApplyCmdline(); } diff --git a/stepmania/src/GameState.h b/stepmania/src/GameState.h index 93f406e116..8fda23edf9 100644 --- a/stepmania/src/GameState.h +++ b/stepmania/src/GameState.h @@ -298,6 +298,9 @@ public: BroadcastOnChange m_stEdit; BroadcastOnChangePtr m_pEditSourceSteps; BroadcastOnChange m_stEditSource; + BroadcastOnChange m_iEditCourseEntryIndex; + enum EditCourseEntryAction { ACTION_EDIT, ACTION_INSERT }; + BroadcastOnChange m_EditCourseEntryAction; // Workout stuff float GetGoalPercentComplete( PlayerNumber pn ); diff --git a/stepmania/src/MessageManager.cpp b/stepmania/src/MessageManager.cpp index 25aa573d54..02076e1019 100644 --- a/stepmania/src/MessageManager.cpp +++ b/stepmania/src/MessageManager.cpp @@ -23,6 +23,8 @@ static const CString MessageNames[] = { "EditPreferredDifficutyP2Changed", "EditPreferredCourseDifficutyP1Changed", "EditPreferredCourseDifficutyP2Changed", + "EditCourseEntryIndexChanged", + "EditCourseEntryActionChanged", "GoalCompleteP1", "GoalCompleteP2", "NoteCrossed", diff --git a/stepmania/src/MessageManager.h b/stepmania/src/MessageManager.h index cd6b7a0f62..1096f7b1e1 100644 --- a/stepmania/src/MessageManager.h +++ b/stepmania/src/MessageManager.h @@ -31,6 +31,8 @@ enum Message MESSAGE_EDIT_PREFERRED_DIFFICULTY_P2_CHANGED, MESSAGE_EDIT_PREFERRED_COURSE_DIFFICULTY_P1_CHANGED, MESSAGE_EDIT_PREFERRED_COURSE_DIFFICULTY_P2_CHANGED, + MESSAGE_EDIT_COURSE_ENTRY_INDEX_CHANGED, + MESSAGE_EDIT_COURSE_ENTRY_ACTION_CHANGED, MESSAGE_GOAL_COMPLETE_P1, MESSAGE_GOAL_COMPLETE_P2, MESSAGE_NOTE_CROSSED, diff --git a/stepmania/src/OptionRow.cpp b/stepmania/src/OptionRow.cpp index f27b948e5b..55c8c38106 100644 --- a/stepmania/src/OptionRow.cpp +++ b/stepmania/src/OptionRow.cpp @@ -731,7 +731,11 @@ void OptionRow::Reload( const OptionRowDefinition &def ) { case SELECT_ONE: FOREACH_HumanPlayer( p ) - m_iChoiceInRowWithFocus[p] = GetOneSelection(p); + { + m_iChoiceInRowWithFocus[p] = GetOneSelection(p, true); + if( m_iChoiceInRowWithFocus[p] == -1 ) + m_iChoiceInRowWithFocus[p] = 0; + } break; case SELECT_MULTIPLE: FOREACH_HumanPlayer( p ) diff --git a/stepmania/src/ScreenCourseManager.cpp b/stepmania/src/ScreenCourseManager.cpp index 7bef0a7150..4e1a52cfe0 100644 --- a/stepmania/src/ScreenCourseManager.cpp +++ b/stepmania/src/ScreenCourseManager.cpp @@ -3,12 +3,14 @@ #include "RageLog.h" #include "GameState.h" #include "SongManager.h" +#include "CommonMetrics.h" enum CourseManagerRow { - ROW_GROUP, + ROW_COURSE_GROUP, ROW_COURSE, - ROW_ACTION + ROW_ACTION, + ROW_DONE, }; enum CourseManagerAction @@ -64,7 +66,7 @@ void ScreenCourseManager::Init() vDefs.push_back( def ); vHands.push_back( NULL ); - def.name = "Course"; + def.name = "Course Group"; def.choices.clear(); def.choices.push_back( "" ); vDefs.push_back( def ); @@ -79,7 +81,7 @@ void ScreenCourseManager::Init() ScreenOptions::InitMenu( INPUTMODE_SHARE_CURSOR, vDefs, vHands ); - OnChange( GAMESTATE->m_MasterPlayerNumber ); + AfterChangeValueInRow( GAMESTATE->m_MasterPlayerNumber ); } void ScreenCourseManager::HandleScreenMessage( const ScreenMessage SM ) @@ -87,16 +89,18 @@ void ScreenCourseManager::HandleScreenMessage( const ScreenMessage SM ) ScreenOptions::HandleScreenMessage( SM ); } -void ScreenCourseManager::OnChange( PlayerNumber pn ) +void ScreenCourseManager::AfterChangeValueInRow( PlayerNumber pn ) { - ScreenOptions::OnChange( pn ); + ScreenOptions::AfterChangeValueInRow( pn ); switch( m_iCurrentRow[pn] ) { - case ROW_GROUP: + default: + ASSERT(0); + case ROW_COURSE_GROUP: // export current course group { - OptionRow &row = *m_pRows[ROW_GROUP]; + OptionRow &row = *m_pRows[ROW_COURSE_GROUP]; int iChoice = row.GetChoiceInRowWithFocus(pn); CString sCourseGroup = row.GetRowDef().choices[iChoice]; GAMESTATE->m_sPreferredCourseGroup.Set( sCourseGroup ); @@ -138,8 +142,29 @@ void ScreenCourseManager::OnChange( PlayerNumber pn ) // fall through case ROW_ACTION: // fall through + case ROW_DONE: + break; + } +} + +void ScreenCourseManager::ProcessMenuStart( PlayerNumber pn, const InputEventType type ) +{ + switch( m_iCurrentRow[pn] ) + { default: - ; // nothing left to do + ASSERT(0); + case ROW_COURSE_GROUP: + SCREENMAN->PlayInvalidSound(); + break; + case ROW_COURSE: + SCREENMAN->PlayInvalidSound(); + break; + case ROW_ACTION: + ScreenOptions::BeginFadingOut(); + break; + case ROW_DONE: + ScreenOptions::BeginFadingOut(); + break; } } @@ -155,35 +180,53 @@ void ScreenCourseManager::ExportOptions( int row, const vector &vp void ScreenCourseManager::GoToNextScreen() { - OptionRow &row = *m_pRows[ROW_ACTION]; - int iChoice = row.GetChoiceInRowWithFocus( GAMESTATE->m_MasterPlayerNumber ); - - vector vActions; - GetPossibleActions( vActions ); - CourseManagerAction action = vActions[iChoice]; - - switch( action ) + switch( m_iCurrentRow[GAMESTATE->m_MasterPlayerNumber] ) { default: ASSERT(0); - case ACTION_EDIT: - SCREENMAN->SetNewScreen( "ScreenEditCourse" ); - break; - case ACTION_DELETE: + case ROW_COURSE_GROUP: SCREENMAN->PlayInvalidSound(); break; - case ACTION_COPY_TO_NEW: + case ROW_COURSE: SCREENMAN->PlayInvalidSound(); break; - case ACTION_CREATE_NEW: - SCREENMAN->PlayInvalidSound(); + case ROW_ACTION: + { + OptionRow &row = *m_pRows[ROW_ACTION]; + int iChoice = row.GetChoiceInRowWithFocus( GAMESTATE->m_MasterPlayerNumber ); + + vector vActions; + GetPossibleActions( vActions ); + CourseManagerAction action = vActions[iChoice]; + + switch( action ) + { + default: + ASSERT(0); + case ACTION_EDIT: + SCREENMAN->SetNewScreen( "ScreenEditCourse" ); + break; + case ACTION_DELETE: + SCREENMAN->PlayInvalidSound(); + break; + case ACTION_COPY_TO_NEW: + SCREENMAN->PlayInvalidSound(); + break; + case ACTION_CREATE_NEW: + SCREENMAN->PlayInvalidSound(); + break; + } + } + break; + case ROW_DONE: + SCREENMAN->SetNewScreen( FIRST_ATTRACT_SCREEN ); break; } } void ScreenCourseManager::GoToPrevScreen() { - + SCREENMAN->SetNewScreen( FIRST_ATTRACT_SCREEN ); } /* diff --git a/stepmania/src/ScreenCourseManager.h b/stepmania/src/ScreenCourseManager.h index 593ca232a6..e5123f411f 100644 --- a/stepmania/src/ScreenCourseManager.h +++ b/stepmania/src/ScreenCourseManager.h @@ -12,14 +12,15 @@ public: virtual void HandleScreenMessage( const ScreenMessage SM ); -private: +protected: virtual void ImportOptions( int row, const vector &vpns ); virtual void ExportOptions( int row, const vector &vpns ); virtual void GoToNextScreen(); virtual void GoToPrevScreen(); - void OnChange( PlayerNumber pn ); + virtual void AfterChangeValueInRow( PlayerNumber pn ); + virtual void ProcessMenuStart( PlayerNumber pn, const InputEventType type ); }; #endif diff --git a/stepmania/src/ScreenEditCourse.cpp b/stepmania/src/ScreenEditCourse.cpp index 79a762fcff..c7b5ec8e7d 100644 --- a/stepmania/src/ScreenEditCourse.cpp +++ b/stepmania/src/ScreenEditCourse.cpp @@ -10,15 +10,42 @@ enum EditCourseRow { ROW_TITLE, - ROW_STEPS_TYPE, - ROW_DIFFICULTY, - ROW_METER, - ROW_SONG_NUMBER, - ROW_SONG, - ROW_STEPS, - ROW_SET_MODS, + ROW_REPEAT, + ROW_RANDOMIZE, + ROW_LIVES, + ROW_TYPE, + ROW_TYPE_METER, + ROW_EDIT_ENTRY, + ROW_INSERT_ENTRY, + ROW_DONE, }; +struct StepsTypeAndDifficulty +{ + StepsType st; + CourseDifficulty cd; +}; + +static void GetStepsTypeAndDifficulty( vector &vOut, vector &vsOut ) +{ + Course *pCourse = GAMESTATE->m_pCurCourse; + + FOREACH_CONST( StepsType, STEPS_TYPES_TO_SHOW.GetValue(), st ) + { + CString s1 = GAMEMAN->StepsTypeToString(*st); + FOREACH_CONST( CourseDifficulty, COURSE_DIFFICULTIES_TO_SHOW.GetValue(), cd ) + { + if( pCourse->GetTrail( *st, *cd ) == NULL ) + continue; + + CString s2 = CourseDifficultyToThemedString(*cd); + StepsTypeAndDifficulty stad = { *st, *cd }; + vOut.push_back( stad ); + vsOut.push_back( s1+" "+s2 ); + } + } +} + REGISTER_SCREEN_CLASS( ScreenEditCourse ); ScreenEditCourse::ScreenEditCourse( CString sName ) : ScreenOptions( sName ) { @@ -43,53 +70,57 @@ void ScreenEditCourse::Init() vDefs.push_back( def ); vHands.push_back( NULL ); - def.name = "Steps Type"; + def.name = "Repeat"; def.choices.clear(); + def.choices.push_back( "NO" ); + def.choices.push_back( "YES" ); + vDefs.push_back( def ); + vHands.push_back( NULL ); + + def.name = "Randomize"; + def.choices.clear(); + def.choices.push_back( "NO" ); + def.choices.push_back( "YES" ); + vDefs.push_back( def ); + vHands.push_back( NULL ); + + def.name = "Lives"; + def.choices.clear(); + def.choices.push_back( "Use Bar Life" ); + for( int i=1; i<=10; i++ ) + def.choices.push_back( ssprintf("%d",i) ); + vDefs.push_back( def ); + vHands.push_back( NULL ); + + def.name = "Type"; + def.choices.clear(); + FOREACH_CONST( StepsType, STEPS_TYPES_TO_SHOW.GetValue(), st ) def.choices.push_back( GAMEMAN->StepsTypeToString(*st) ); vDefs.push_back( def ); vHands.push_back( NULL ); - def.name = "Difficulty"; + def.name = "Type Meter"; def.choices.clear(); def.choices.push_back( "" ); vDefs.push_back( def ); vHands.push_back( NULL ); - def.name = "Meter"; - def.choices.clear(); - for( int i=MIN_METER; i<=MAX_METER; i++ ) - def.choices.push_back( ssprintf("%d",i) ); - vDefs.push_back( def ); - vHands.push_back( NULL ); - - def.name = "Song Number"; + def.name = "Edit Entry"; def.choices.clear(); def.choices.push_back( "" ); vDefs.push_back( def ); vHands.push_back( NULL ); - def.name = "Song"; + def.name = "Insert Entry"; def.choices.clear(); def.choices.push_back( "" ); vDefs.push_back( def ); vHands.push_back( NULL ); - def.name = "Steps"; - def.choices.clear(); - def.choices.push_back( "" ); - vDefs.push_back( def ); - vHands.push_back( NULL ); - - def.name = "Set Mods"; - def.choices.clear(); - def.choices.push_back( "Set Mods" ); - vDefs.push_back( def ); - vHands.push_back( NULL ); - ScreenOptions::InitMenu( INPUTMODE_SHARE_CURSOR, vDefs, vHands ); - OnChange( GAMESTATE->m_MasterPlayerNumber ); + AfterChangeValueInRow( GAMESTATE->m_MasterPlayerNumber ); } void ScreenEditCourse::HandleScreenMessage( const ScreenMessage SM ) @@ -97,103 +128,118 @@ void ScreenEditCourse::HandleScreenMessage( const ScreenMessage SM ) ScreenOptions::HandleScreenMessage( SM ); } -void ScreenEditCourse::OnChange( PlayerNumber pn ) +void ScreenEditCourse::AfterChangeValueInRow( PlayerNumber pn ) { - ScreenOptions::OnChange( pn ); + ScreenOptions::AfterChangeValueInRow( pn ); Course *pCourse = GAMESTATE->m_pCurCourse; StepsType st = STEPS_TYPE_INVALID; CourseDifficulty cd = DIFFICULTY_INVALID; - Trail *pTrail = NULL; int iMeter = -1; - int iSongNumber = -1; - Song *pSong = NULL; - Steps *pSteps = NULL; switch( m_iCurrentRow[pn] ) { - case ROW_STEPS_TYPE: - // export StepsType + default: + ASSERT(0); + case ROW_TITLE: + // fall through + case ROW_REPEAT: + // fall through + case ROW_RANDOMIZE: + // fall through + case ROW_LIVES: + // Refresh type { - OptionRow &row = *m_pRows[ROW_STEPS_TYPE]; - int iChoice = row.GetChoiceInRowWithFocus( GAMESTATE->m_MasterPlayerNumber ); - st = STEPS_TYPES_TO_SHOW.GetValue()[iChoice]; - } - // Refresh difficulties - { - OptionRow &row = *m_pRows[ROW_DIFFICULTY]; + OptionRow &row = *m_pRows[ROW_TYPE]; OptionRowDefinition def = row.GetRowDef(); def.choices.clear(); - FOREACH_CONST( CourseDifficulty, COURSE_DIFFICULTIES_TO_SHOW.GetValue(), cd ) - def.choices.push_back( CourseDifficultyToThemedString(*cd) ); + vector vThrowAway; + GetStepsTypeAndDifficulty( vThrowAway, def.choices ); row.Reload( def ); } // fall through - case ROW_DIFFICULTY: - // export CouresDifficulty + case ROW_TYPE: + // export StepsType and CouresDifficulty { - OptionRow &row = *m_pRows[ROW_DIFFICULTY]; + OptionRow &row = *m_pRows[ROW_TYPE]; int iChoice = row.GetChoiceInRowWithFocus( GAMESTATE->m_MasterPlayerNumber ); - cd = COURSE_DIFFICULTIES_TO_SHOW.GetValue()[iChoice]; - pTrail = pCourse->GetTrail( st, cd ); + vector v; + vector vsThrowAway; + GetStepsTypeAndDifficulty( v, vsThrowAway ); + st = v[iChoice].st; + cd = v[iChoice].cd; + GAMESTATE->m_pCurTrail[GAMESTATE->m_MasterPlayerNumber].Set( pCourse->GetTrail( st, cd ) ); } // refresh meter { - OptionRow &row = *m_pRows[ROW_METER]; + OptionRow &row = *m_pRows[ROW_TYPE_METER]; OptionRowDefinition def = row.GetRowDef(); - row.SetOneSharedSelection( pTrail->GetMeter()-1 ); + Trail *pTrail = GAMESTATE->m_pCurTrail[GAMESTATE->m_MasterPlayerNumber]; + def.choices.clear(); + if( pTrail != NULL ) + { + for( int i=MIN_METER; i<=MAX_METER; i++ ) + def.choices.push_back( ssprintf("%d",i) ); + row.SetOneSharedSelection( pTrail->GetMeter()-MIN_METER ); + } + else + { + def.choices.push_back( "N/A" ); + } row.Reload( def ); } - // fall through - case ROW_METER: - // export meter + // refresh edit entry { - OptionRow &row = *m_pRows[ROW_METER]; - int iChoice = row.GetChoiceInRowWithFocus( GAMESTATE->m_MasterPlayerNumber ); - iMeter = 1+iChoice; - } - // refresh song number - { - OptionRow &row = *m_pRows[ROW_SONG_NUMBER]; + OptionRow &row = *m_pRows[ROW_EDIT_ENTRY]; OptionRowDefinition def = row.GetRowDef(); + def.choices.clear(); + Trail *pTrail = GAMESTATE->m_pCurTrail[GAMESTATE->m_MasterPlayerNumber]; + ASSERT( pTrail ); + for( unsigned i=0; im_vEntries.size(); i++ ) + def.choices.push_back( ssprintf("%u of %u",i+1,pTrail->m_vEntries.size()) ); + row.SetOneSharedSelection( 0 ); + row.Reload( def ); + } + // refresh insert entry + { + OptionRow &row = *m_pRows[ROW_INSERT_ENTRY]; + OptionRowDefinition def = row.GetRowDef(); + def.choices.clear(); + Trail *pTrail = GAMESTATE->m_pCurTrail[GAMESTATE->m_MasterPlayerNumber]; + ASSERT( pTrail ); + for( unsigned i=0; i<=pTrail->m_vEntries.size(); i++ ) + { + CString s; + if( i == pTrail->m_vEntries.size() ) + s = ssprintf("After %u",i); + else + s = ssprintf("Before %u",i+1); + def.choices.push_back( s ); + } row.SetOneSharedSelection( 0 ); row.Reload( def ); } // fall through - case ROW_SONG_NUMBER: - // export song number + case ROW_TYPE_METER: + // export meter { - OptionRow &row = *m_pRows[ROW_SONG_NUMBER]; + OptionRow &row = *m_pRows[ROW_TYPE_METER]; int iChoice = row.GetChoiceInRowWithFocus( GAMESTATE->m_MasterPlayerNumber ); - iSongNumber = 1+iChoice; + iMeter = 1+iChoice; + } + // fall through + case ROW_EDIT_ENTRY: + // fall through + case ROW_INSERT_ENTRY: + // export entry number + { + EditCourseRow ecr = m_iCurrentRow[GAMESTATE->m_MasterPlayerNumber] == ROW_EDIT_ENTRY ? ROW_EDIT_ENTRY : ROW_INSERT_ENTRY; + OptionRow &row = *m_pRows[ecr]; + int iChoice = row.GetChoiceInRowWithFocus( GAMESTATE->m_MasterPlayerNumber ); + GAMESTATE->m_iEditCourseEntryIndex.Set( iChoice ); } - // refresh song - { - OptionRow &row = *m_pRows[ROW_SONG]; - OptionRowDefinition def = row.GetRowDef(); - row.SetOneSharedSelection( pTrail->GetMeter()-1 ); - row.Reload( def ); - } // fall through - case ROW_SONG: - // export song - { - OptionRow &row = *m_pRows[ROW_SONG]; - int iChoice = row.GetChoiceInRowWithFocus( GAMESTATE->m_MasterPlayerNumber ); - pSong = SONGMAN->GetAllSongs()[iChoice]; - } - // fall through - case ROW_STEPS: - // export steps - { - OptionRow &row = *m_pRows[ROW_SONG]; - int iChoice = row.GetChoiceInRowWithFocus( GAMESTATE->m_MasterPlayerNumber ); - pSteps = pSong->GetStepsByStepsType(st)[iChoice]; - } - // fall through - case ROW_SET_MODS: - // fall through - default: - ; // nothing left to do + case ROW_DONE: + break; } } @@ -209,33 +255,56 @@ void ScreenEditCourse::ExportOptions( int row, const vector &vpns void ScreenEditCourse::GoToNextScreen() { - SCREENMAN->SetNewScreen( "ScreenEditCourseMenu" ); + switch( m_iCurrentRow[GAMESTATE->m_MasterPlayerNumber] ) + { + default: + case ROW_TITLE: + case ROW_REPEAT: + case ROW_RANDOMIZE: + case ROW_LIVES: + case ROW_TYPE: + case ROW_TYPE_METER: + ASSERT(0); + case ROW_EDIT_ENTRY: + SCREENMAN->SetNewScreen( "ScreenEditCourseEntry" ); + break; + case ROW_DONE: + SCREENMAN->SetNewScreen( "ScreenCourseManager" ); + break; + } } void ScreenEditCourse::GoToPrevScreen() { - + SCREENMAN->SetNewScreen( "ScreenCourseManager" ); } -void ScreenEditCourse::BeginFadingOut() +void ScreenEditCourse::ProcessMenuStart( PlayerNumber pn, const InputEventType type ) { switch( m_iCurrentRow[GAMESTATE->m_MasterPlayerNumber] ) { + default: + ASSERT(0); case ROW_TITLE: + case ROW_REPEAT: + case ROW_RANDOMIZE: + case ROW_LIVES: + case ROW_TYPE: + case ROW_TYPE_METER: + SCREENMAN->PlayInvalidSound(); break; - case ROW_STEPS_TYPE: - break; - case ROW_DIFFICULTY: - break; - case ROW_METER: - break; - case ROW_SONG_NUMBER: - break; - case ROW_SONG: - break; - case ROW_STEPS: - break; - case ROW_SET_MODS: + case ROW_EDIT_ENTRY: + case ROW_INSERT_ENTRY: + { + Trail *pTrail = GAMESTATE->m_pCurTrail[GAMESTATE->m_MasterPlayerNumber]; + if( pTrail == NULL ) + { + SCREENMAN->PlayInvalidSound(); + return; + } + } + case ROW_DONE: + ScreenOptions::BeginFadingOut(); break; } } diff --git a/stepmania/src/ScreenEditCourse.h b/stepmania/src/ScreenEditCourse.h index 5480fca644..7f0e5409a5 100644 --- a/stepmania/src/ScreenEditCourse.h +++ b/stepmania/src/ScreenEditCourse.h @@ -12,16 +12,15 @@ public: virtual void HandleScreenMessage( const ScreenMessage SM ); -private: +protected: virtual void ImportOptions( int row, const vector &vpns ); virtual void ExportOptions( int row, const vector &vpns ); virtual void GoToNextScreen(); virtual void GoToPrevScreen(); - virtual void OnChange( PlayerNumber pn ); - - virtual void BeginFadingOut(); + virtual void AfterChangeValueInRow( PlayerNumber pn ); + virtual void ProcessMenuStart( PlayerNumber pn, const InputEventType type ); }; #endif diff --git a/stepmania/src/ScreenEditCourseEntry.cpp b/stepmania/src/ScreenEditCourseEntry.cpp new file mode 100644 index 0000000000..9f302f93ff --- /dev/null +++ b/stepmania/src/ScreenEditCourseEntry.cpp @@ -0,0 +1,288 @@ +#include "global.h" +#include "ScreenEditCourseEntry.h" +#include "RageLog.h" +#include "GameState.h" +#include "SongManager.h" +#include "CommonMetrics.h" +#include "GameManager.h" +#include "song.h" + +enum EditCourseRow +{ + ROW_ENTRY_TYPE, + ROW_SONG_GROUP, + ROW_SONG, + ROW_DIFFICULTY, + ROW_LOW_METER, + ROW_HIGH_METER, + ROW_BEST_WORST_VALUE, + ROW_SET_MODS, + ROW_DONE, +}; + +REGISTER_SCREEN_CLASS( ScreenEditCourseEntry ); +ScreenEditCourseEntry::ScreenEditCourseEntry( CString sName ) : ScreenOptions( sName ) +{ + LOG->Trace( "ScreenEditCourseEntry::ScreenEditCourseEntry()" ); +} + +void ScreenEditCourseEntry::Init() +{ + ScreenOptions::Init(); + + vector vDefs; + vector vHands; + + OptionRowDefinition def; + def.layoutType = LAYOUT_SHOW_ONE_IN_ROW; + + def.name = "Entry Type"; + def.choices.clear(); + FOREACH_CourseEntryType( i ) + def.choices.push_back( CourseEntryTypeToThemedString(i) ); + vDefs.push_back( def ); + vHands.push_back( NULL ); + + def.name = "Song Group"; + def.choices.clear(); + vector vsSongGroups; + SONGMAN->GetSongGroupNames( vsSongGroups ); + FOREACH_CONST( CString, vsSongGroups, s ) + def.choices.push_back( *s ); + vDefs.push_back( def ); + vHands.push_back( NULL ); + + def.name = "Song"; + def.choices.clear(); + def.choices.push_back( "" ); + vDefs.push_back( def ); + vHands.push_back( NULL ); + + def.name = "Difficulty"; + def.choices.clear(); + FOREACH_CONST( Difficulty, DIFFICULTIES_TO_SHOW.GetValue(), dc ) + def.choices.push_back( DifficultyToThemedString(*dc) ); + vDefs.push_back( def ); + vHands.push_back( NULL ); + + def.name = "Low Meter"; + def.choices.clear(); + for( int i=MIN_METER; i<=MAX_METER; i++ ) + def.choices.push_back( ssprintf("%i",i) ); + vDefs.push_back( def ); + vHands.push_back( NULL ); + + def.name = "High Meter"; + def.choices.clear(); + for( int i=MIN_METER; i<=MAX_METER; i++ ) + def.choices.push_back( ssprintf("%i",i) ); + vDefs.push_back( def ); + vHands.push_back( NULL ); + + def.name = "Best/Worst Value"; + def.choices.clear(); + for( int i=1; i<=20; i++ ) + def.choices.push_back( ssprintf("%i",i) ); + vDefs.push_back( def ); + vHands.push_back( NULL ); + + def.name = "Set Mods"; + def.choices.clear(); + def.choices.push_back( "Set Mods" ); + vDefs.push_back( def ); + vHands.push_back( NULL ); + + ScreenOptions::InitMenu( INPUTMODE_SHARE_CURSOR, vDefs, vHands ); + + AfterChangeValueInRow( GAMESTATE->m_MasterPlayerNumber ); +} + +void ScreenEditCourseEntry::HandleScreenMessage( const ScreenMessage SM ) +{ + ScreenOptions::HandleScreenMessage( SM ); +} + +void ScreenEditCourseEntry::AfterChangeValueInRow( PlayerNumber pn ) +{ + ScreenOptions::AfterChangeValueInRow( pn ); + Course *pCourse = GAMESTATE->m_pCurCourse; + CourseEntry &ce = pCourse->m_entries[ GAMESTATE->m_iEditCourseEntryIndex ]; + CString sSongGroup; + + switch( m_iCurrentRow[pn] ) + { + case ROW_ENTRY_TYPE: + // export entry type + { + } + // fall through + case ROW_SONG_GROUP: + // export song group + { + OptionRow &row = *m_pRows[ROW_SONG_GROUP]; + int iChoice = row.GetChoiceInRowWithFocus( GAMESTATE->m_MasterPlayerNumber ); + sSongGroup = row.GetRowDef().choices[ iChoice ]; + } + // refresh songs + { + OptionRow &row = *m_pRows[ROW_SONG]; + OptionRowDefinition def = row.GetRowDef(); + def.choices.clear(); + vector vpSongs; + SONGMAN->GetSongs( vpSongs, sSongGroup ); + FOREACH_CONST( Song*, vpSongs, s ) + def.choices.push_back( (*s)->GetTranslitFullTitle() ); + vector::const_iterator iter = find( vpSongs.begin(), vpSongs.end(), ce.pSong ); + if( iter != vpSongs.end() ) + { + int iSongIndex = iter - vpSongs.begin(); + row.SetOneSharedSelection( iSongIndex ); + } + else + { + row.SetOneSharedSelection( 0 ); + } + row.Reload( def ); + } + // fall through + case ROW_SONG: + // export song + { + OptionRow &row = *m_pRows[ROW_SONG]; + int iChoice = row.GetChoiceInRowWithFocus( GAMESTATE->m_MasterPlayerNumber ); + ce.pSong = SONGMAN->GetAllSongs()[iChoice]; + } + // fall through + case ROW_DIFFICULTY: + // export difficulty + { + OptionRow &row = *m_pRows[ROW_DIFFICULTY]; + int iChoice = row.GetChoiceInRowWithFocus( GAMESTATE->m_MasterPlayerNumber ); + ce.difficulty = DIFFICULTIES_TO_SHOW.GetValue()[iChoice]; + } + // fall through + case ROW_LOW_METER: + // export low meter + { + } + // fall through + case ROW_HIGH_METER: + // export high meter + { + } + // fall through + case ROW_BEST_WORST_VALUE: + // export best/worst value + { + } + // fall through + case ROW_SET_MODS: + // fall through + default: + ; // nothing left to do + } +} + +void ScreenEditCourseEntry::ImportOptions( int row, const vector &vpns ) +{ + Course *pCourse = GAMESTATE->m_pCurCourse; + CourseEntry &ce = pCourse->m_entries[ GAMESTATE->m_iEditCourseEntryIndex ]; + + // import entry song + { + int iSongIndex = -1; + vector::const_iterator iter = find( SONGMAN->GetAllSongs().begin(), SONGMAN->GetAllSongs().end(), ce.pSong ); + if( iter != SONGMAN->GetAllSongs().end() ) + iSongIndex = iter - SONGMAN->GetAllSongs().begin(); + OptionRow &row = *m_pRows[ROW_SONG]; + if( iSongIndex != -1 ) + row.SetOneSharedSelection( iSongIndex ); + } + /* + // import entry difficulty + { + int iDifficultyIndex = -1; + vector::const_iterator iter = find( DIFFICULTIES_TO_SHOW.GetValue().begin(), DIFFICULTIES_TO_SHOW.GetValue().end(), ce.difficulty ); + if( iter != DIFFICULTIES_TO_SHOW.GetValue().end() ) + iDifficultyIndex = iter - DIFFICULTIES_TO_SHOW.GetValue().begin(); + OptionRow &row = *m_pRows[ROW_DIFFICULTY]; + if( iDifficultyIndex != -1 ) + row.SetOneSharedSelection( iDifficultyIndex ); + } + */ +} + +void ScreenEditCourseEntry::ExportOptions( int row, const vector &vpns ) +{ + +} + +void ScreenEditCourseEntry::GoToNextScreen() +{ + switch( m_iCurrentRow[GAMESTATE->m_MasterPlayerNumber] ) + { + case ROW_ENTRY_TYPE: + case ROW_SONG_GROUP: + case ROW_SONG: + case ROW_DIFFICULTY: + case ROW_LOW_METER: + case ROW_HIGH_METER: + case ROW_BEST_WORST_VALUE: + break; + case ROW_SET_MODS: + SCREENMAN->SetNewScreen( "ScreenEditCourseMods" ); + break; + case ROW_DONE: + SCREENMAN->SetNewScreen( "ScreenEditCourse" ); + break; + } +} + +void ScreenEditCourseEntry::GoToPrevScreen() +{ + SCREENMAN->SetNewScreen( "ScreenEditCourse" ); +} + +void ScreenEditCourseEntry::ProcessMenuStart( PlayerNumber pn, const InputEventType type ) +{ + switch( m_iCurrentRow[GAMESTATE->m_MasterPlayerNumber] ) + { + case ROW_ENTRY_TYPE: + case ROW_SONG_GROUP: + case ROW_SONG: + case ROW_DIFFICULTY: + case ROW_LOW_METER: + case ROW_HIGH_METER: + case ROW_BEST_WORST_VALUE: + break; + case ROW_SET_MODS: + case ROW_DONE: + ScreenOptions::ProcessMenuStart( pn, type ); + break; + } +} + +/* + * (c) 2002-2004 Chris Danford + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, and/or sell copies of the Software, and to permit persons to + * whom the Software is furnished to do so, provided that the above + * copyright notice(s) and this permission notice appear in all copies of + * the Software and that both the above copyright notice(s) and this + * permission notice appear in supporting documentation. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF + * THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS + * INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT + * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS + * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ diff --git a/stepmania/src/ScreenEditCourseEntry.h b/stepmania/src/ScreenEditCourseEntry.h new file mode 100644 index 0000000000..5b7e4f7300 --- /dev/null +++ b/stepmania/src/ScreenEditCourseEntry.h @@ -0,0 +1,51 @@ +#ifndef ScreenEditCourseEntry_H +#define ScreenEditCourseEntry_H + +#include "ScreenOptions.h" + +class ScreenEditCourseEntry : public ScreenOptions +{ +public: + ScreenEditCourseEntry( CString sName ); + + void Init(); + + virtual void HandleScreenMessage( const ScreenMessage SM ); + +protected: + virtual void ImportOptions( int row, const vector &vpns ); + virtual void ExportOptions( int row, const vector &vpns ); + + virtual void GoToNextScreen(); + virtual void GoToPrevScreen(); + + virtual void AfterChangeValueInRow( PlayerNumber pn ); + virtual void ProcessMenuStart( PlayerNumber pn, const InputEventType type ); +}; + +#endif + +/* + * (c) 2003-2004 Chris Danford + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, and/or sell copies of the Software, and to permit persons to + * whom the Software is furnished to do so, provided that the above + * copyright notice(s) and this permission notice appear in all copies of + * the Software and that both the above copyright notice(s) and this + * permission notice appear in supporting documentation. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF + * THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS + * INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT + * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS + * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ diff --git a/stepmania/src/ScreenOptions.cpp b/stepmania/src/ScreenOptions.cpp index bc2829482a..82ceb6fce4 100644 --- a/stepmania/src/ScreenOptions.cpp +++ b/stepmania/src/ScreenOptions.cpp @@ -768,10 +768,6 @@ void ScreenOptions::MenuStart( PlayerNumber pn, const InputEventType type ) break; } - int iCurRow = m_iCurrentRow[pn]; - OptionRow &row = *m_pRows[iCurRow]; - - /* If we are in a three-button mode, check to see if MENU_BUTTON_LEFT and * MENU_BUTTON_RIGHT are being held. */ switch( m_OptionsNavigation ) @@ -789,6 +785,14 @@ void ScreenOptions::MenuStart( PlayerNumber pn, const InputEventType type ) } } } + + this->ProcessMenuStart( pn, type ); +} + +void ScreenOptions::ProcessMenuStart( PlayerNumber pn, const InputEventType type ) +{ + int iCurRow = m_iCurrentRow[pn]; + OptionRow &row = *m_pRows[iCurRow]; // // Check whether Start ends this screen. @@ -1000,6 +1004,7 @@ void ScreenOptions::ChangeValueInRow( PlayerNumber pn, int iDelta, bool Repeat ) UpdateText( iCurRow ); OnChange( pn ); + this->AfterChangeValueInRow( pn ); if( m_OptionsNavigation != NAV_THREE_KEY_MENU ) m_SoundChangeCol.Play(); diff --git a/stepmania/src/ScreenOptions.h b/stepmania/src/ScreenOptions.h index cd82b03215..70977f371b 100644 --- a/stepmania/src/ScreenOptions.h +++ b/stepmania/src/ScreenOptions.h @@ -56,12 +56,14 @@ protected: virtual void MenuBack( PlayerNumber pn ); virtual void MenuStart( PlayerNumber pn, const InputEventType type ); + virtual void ProcessMenuStart( PlayerNumber pn, const InputEventType type ); virtual void BeginFadingOut() { this->PostScreenMessage( SM_BeginFadingOut, 0 ); } virtual void GoToNextScreen() = 0; virtual void GoToPrevScreen() = 0; void ChangeValueInRow( PlayerNumber pn, int iDelta, bool Repeat ); + virtual void AfterChangeValueInRow( PlayerNumber pn ) {} // override this to detect when the value in a row has changed void MoveRow( PlayerNumber pn, int dir, bool Repeat ); void MenuLeft( PlayerNumber pn, const InputEventType type ) { ChangeValueInRow(pn,-1,type != IET_FIRST_PRESS); } diff --git a/stepmania/src/StepMania-net2003.vcproj b/stepmania/src/StepMania-net2003.vcproj index cbe897e0c9..a1f1062292 100644 --- a/stepmania/src/StepMania-net2003.vcproj +++ b/stepmania/src/StepMania-net2003.vcproj @@ -282,6 +282,12 @@ cl /Zl /nologo /c verstub.cpp /Fo"$(IntDir)"\ + + + + @@ -309,6 +315,18 @@ cl /Zl /nologo /c verstub.cpp /Fo"$(IntDir)"\ + + + + + + + + @@ -387,12 +405,6 @@ cl /Zl /nologo /c verstub.cpp /Fo"$(IntDir)"\ - - - - diff --git a/stepmania/src/StepMania.dsp b/stepmania/src/StepMania.dsp index 9b09b44201..19f3eae7c0 100644 --- a/stepmania/src/StepMania.dsp +++ b/stepmania/src/StepMania.dsp @@ -62,7 +62,7 @@ IntDir=.\../Debug6 TargetDir=\cvs\stepmania\Program TargetName=StepMania-debug SOURCE="$(InputPath)" -PreLink_Cmds=archutils\Win32\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\ +PreLink_Cmds=archutils\Win32\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\ PostBuild_Cmds=archutils\Win32\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania.vdi # End Special Build Tool @@ -99,7 +99,7 @@ IntDir=.\../Release6 TargetDir=\cvs\stepmania\Program TargetName=StepMania SOURCE="$(InputPath)" -PreLink_Cmds=archutils\Win32\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\ +PreLink_Cmds=archutils\Win32\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\ PostBuild_Cmds=archutils\Win32\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania.vdi # End Special Build Tool @@ -2282,14 +2282,6 @@ SOURCE=.\GraphDisplay.h # End Source File # Begin Source File -SOURCE=.\GrooveGraph.cpp -# End Source File -# Begin Source File - -SOURCE=.\GrooveGraph.h -# End Source File -# Begin Source File - SOURCE=.\GrooveRadar.cpp # End Source File # Begin Source File @@ -2526,6 +2518,14 @@ SOURCE=.\ScreenCenterImage.h # End Source File # Begin Source File +SOURCE=.\ScreenCourseManager.cpp +# End Source File +# Begin Source File + +SOURCE=.\ScreenCourseManager.h +# End Source File +# Begin Source File + SOURCE=.\ScreenCredits.cpp # End Source File # Begin Source File @@ -2558,6 +2558,22 @@ SOURCE=.\ScreenEdit.h # End Source File # Begin Source File +SOURCE=.\ScreenEditCourse.cpp +# End Source File +# Begin Source File + +SOURCE=.\ScreenEditCourse.h +# End Source File +# Begin Source File + +SOURCE=.\ScreenEditCourseEntry.cpp +# End Source File +# Begin Source File + +SOURCE=.\ScreenEditCourseEntry.h +# End Source File +# Begin Source File + SOURCE=.\ScreenEditCoursesMenu.cpp # End Source File # Begin Source File @@ -2672,14 +2688,6 @@ SOURCE=.\ScreenJukebox.h # End Source File # Begin Source File -SOURCE=.\ScreenLogo.cpp -# End Source File -# Begin Source File - -SOURCE=.\ScreenLogo.h -# End Source File -# Begin Source File - SOURCE=.\ScreenMapControllers.cpp # End Source File # Begin Source File diff --git a/stepmania/src/StepMania.vcproj b/stepmania/src/StepMania.vcproj index 98724fe202..f13e9cd9fa 100644 --- a/stepmania/src/StepMania.vcproj +++ b/stepmania/src/StepMania.vcproj @@ -262,6 +262,12 @@ cl /Zl /nologo /c verstub.cpp /Fo"$(IntDir)"\ + + + + @@ -289,6 +295,18 @@ cl /Zl /nologo /c verstub.cpp /Fo"$(IntDir)"\ + + + + + + + +