more work on editor

This commit is contained in:
Chris Danford
2003-02-19 05:46:09 +00:00
parent 0c36bcdbbf
commit e6273f1db3
10 changed files with 224 additions and 204 deletions
+151 -166
View File
@@ -86,17 +86,31 @@ const ScreenMessage SM_BackFromEditSongInfo = (ScreenMessage)(SM_User+5);
const CString HELP_TEXT = const CString HELP_TEXT =
"Up/Down:\n change beat\n" "Up/Down:\n change beat\n"
"Left/Right:\n change snap\n" "Left/Right:\n change snap\n"
"PgUp/PgDn:\n jump measure\n"
"Home/End:\n jump to first/\n last beat\n"
"Number keys:\n add/remove\n tap note\n" "Number keys:\n add/remove\n tap note\n"
"Create hold note:\n Hold a number\n while moving\n Up or Down\n" "Create hold note:\n Hold a number\n while moving\n Up or Down\n"
"F7/F8:\n Dec/inc BPM\n at cur beat\n" "Space bar:\n Set area\n marker\n"
"F9/F10:\n Dec/inc stop\n at cur beat\n" "Enter:\n Area Menu\n"
"F11/F12:\n Dec/inc music\n offset\n" "Escape:\n Main Menu\n"
"[ and ]:\n Dec/inc sample\n music start\n" "F1:\n Show\n keyboard\n shortcuts\n";
"{ and }:\n Dec/inc sample\n music length\n";
MiniMenuDefinition g_KeyboardShortcuts =
{
"Keyboard Shortcuts",
9,
{
{ "PgUp/PgDn: jump measure", false, 1, 0, {""} },
{ "Home/End: jump to first/last beat", false, 1, 0, {""} },
{ "Ctrl + Up/Down: Change zoom", false, 1, 0, {""} },
{ "Shift + Up/Down: Drag area marker", false, 1, 0, {""} },
{ "F7/F8: Decrease/increase BPM at cur beat", false, 1, 0, {""} },
{ "F9/F10: Decrease/increase stop at cur beat", false, 1, 0, {""} },
{ "F11/F12: Decrease/increase music offset", false, 1, 0, {""} },
{ "[ and ]: Decrease/increase sample music start", false, 1, 0, {""} },
{ "{ and }: Decrease/increase sample music length", false, 1, 0, {""} },
}
};
MiniMenuDefinition g_MainMenu = MiniMenuDefinition g_MainMenu =
{ {
"Main Menu", "Main Menu",
@@ -105,7 +119,6 @@ MiniMenuDefinition g_MainMenu =
{ "Edit Notes Statistics", true, 1, 0, {""} }, { "Edit Notes Statistics", true, 1, 0, {""} },
{ "Play Whole Song", true, 1, 0, {""} }, { "Play Whole Song", true, 1, 0, {""} },
{ "Save", true, 1, 0, {""} }, { "Save", true, 1, 0, {""} },
{ "Editor Options", true, 1, 0, {""} },
{ "Player Options", true, 1, 0, {""} }, { "Player Options", true, 1, 0, {""} },
{ "Song Options", true, 1, 0, {""} }, { "Song Options", true, 1, 0, {""} },
{ "Edit Song Info", true, 1, 0, {""} }, { "Edit Song Info", true, 1, 0, {""} },
@@ -155,17 +168,6 @@ MiniMenuDefinition g_EditNotesStatistics =
}; };
MiniMenuDefinition g_EditOptions =
{
"Edit Options",
ScreenEdit::NUM_EDIT_OPTIONS_CHOICES,
{
{ "Zoom", true, 3, 0, {"1X","2X","4X"} },
{ "Max Notes Per Row", true, 4, 0, {"NO LIMIT","2","3","4"} },
{ "After Note Add", true, 2, 0, {"STAY","NEXT LINE"} },
}
};
MiniMenuDefinition g_EditSongInfo = MiniMenuDefinition g_EditSongInfo =
{ {
"Edit Song Info", "Edit Song Info",
@@ -490,12 +492,11 @@ void ScreenEdit::Update( float fDeltaTime )
CString sText; CString sText;
sText += ssprintf( "Current Beat:\n %.2f\n", GAMESTATE->m_fSongBeat ); sText += ssprintf( "Current Beat:\n %.2f\n", GAMESTATE->m_fSongBeat );
sText += ssprintf( "Snap to:\n %s\n", sNoteType.GetString() ); sText += ssprintf( "Snap to:\n %s\n", sNoteType.GetString() );
sText += ssprintf( "Selection begin:\n %.2f\n", m_NoteFieldEdit.m_fBeginMarker ); sText += ssprintf( "Selection begin:\n %s\n", m_NoteFieldEdit.m_fBeginMarker==-1 ? "not set" : ssprintf("%.2f",m_NoteFieldEdit.m_fBeginMarker).GetString() );
sText += ssprintf( "Selection end:\n %.2f\n", m_NoteFieldEdit.m_fEndMarker ); sText += ssprintf( "Selection end:\n %s\n", m_NoteFieldEdit.m_fEndMarker==-1 ? "not set" : ssprintf("%.2f",m_NoteFieldEdit.m_fEndMarker).GetString() );
sText += ssprintf( "Difficulty:\n %s\n", DifficultyToString( m_pNotes->GetDifficulty() ).GetString() ); sText += ssprintf( "Difficulty:\n %s\n", DifficultyToString( m_pNotes->GetDifficulty() ).GetString() );
sText += ssprintf( "Description:\n %s\n", GAMESTATE->m_pCurNotes[PLAYER_1] ? GAMESTATE->m_pCurNotes[PLAYER_1]->GetDescription().GetString() : "no description" ); sText += ssprintf( "Description:\n %s\n", GAMESTATE->m_pCurNotes[PLAYER_1] ? GAMESTATE->m_pCurNotes[PLAYER_1]->GetDescription().GetString() : "no description" );
sText += ssprintf( "Main title:\n %s\n", m_pSong->m_sMainTitle.GetString() ); sText += ssprintf( "Main title:\n %s\n", m_pSong->m_sMainTitle.GetString() );
sText += ssprintf( "Sub title:\n %s\n", m_pSong->m_sSubTitle.GetString() );
sText += ssprintf( "Tap Notes:\n %d\n", iNumTapNotes ); sText += ssprintf( "Tap Notes:\n %d\n", iNumTapNotes );
sText += ssprintf( "Hold Notes:\n %d\n", iNumHoldNotes ); sText += ssprintf( "Hold Notes:\n %d\n", iNumHoldNotes );
sText += ssprintf( "Beat 0 Offset:\n %.2f secs\n", m_pSong->m_fBeat0OffsetInSeconds ); sText += ssprintf( "Beat 0 Offset:\n %.2f secs\n", m_pSong->m_fBeat0OffsetInSeconds );
@@ -554,71 +555,6 @@ void ScreenEdit::Input( const DeviceInput& DeviceI, const InputEventType type, c
} }
} }
// Begin helper functions for InputEdit
void AddBGChange( CString sBGName )
{
Song* pSong = GAMESTATE->m_pCurSong;
unsigned i;
for( i=0; i<pSong->m_BackgroundChanges.size(); i++ )
{
if( pSong->m_BackgroundChanges[i].m_fStartBeat == GAMESTATE->m_fSongBeat )
break;
}
if( i != pSong->m_BackgroundChanges.size() ) // there is already a BGChange here
pSong->m_BackgroundChanges.erase( pSong->m_BackgroundChanges.begin()+i,
pSong->m_BackgroundChanges.begin()+i+1);
// create a new BGChange
if( sBGName != "" )
pSong->AddBackgroundChange( BackgroundChange(GAMESTATE->m_fSongBeat, sBGName) );
}
void ChangeDescription( CString sNew )
{
Notes* pNotes = GAMESTATE->m_pCurNotes[PLAYER_1];
pNotes->SetDescription(sNew);
}
void ChangeMainTitle( CString sNew )
{
Song* pSong = GAMESTATE->m_pCurSong;
pSong->m_sMainTitle = sNew;
}
void ChangeSubTitle( CString sNew )
{
Song* pSong = GAMESTATE->m_pCurSong;
pSong->m_sSubTitle = sNew;
}
void ChangeArtist( CString sNew )
{
Song* pSong = GAMESTATE->m_pCurSong;
pSong->m_sArtist = sNew;
}
void ChangeMainTitleTranslit( CString sNew )
{
Song* pSong = GAMESTATE->m_pCurSong;
pSong->m_sMainTitleTranslit = sNew;
}
void ChangeSubTitleTranslit( CString sNew )
{
Song* pSong = GAMESTATE->m_pCurSong;
pSong->m_sSubTitleTranslit = sNew;
}
void ChangeArtistTranslit( CString sNew )
{
Song* pSong = GAMESTATE->m_pCurSong;
pSong->m_sArtistTranslit = sNew;
}
// End helper functions for InputEdit
void ScreenEdit::InputEdit( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ) void ScreenEdit::InputEdit( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI )
{ {
if( DeviceI.device != DEVICE_KEYBOARD ) if( DeviceI.device != DEVICE_KEYBOARD )
@@ -799,11 +735,11 @@ void ScreenEdit::InputEdit( const DeviceInput& DeviceI, const InputEventType typ
GAMESTATE->m_fSongBeat = m_NoteFieldEdit.GetLastBeat(); GAMESTATE->m_fSongBeat = m_NoteFieldEdit.GetLastBeat();
m_soundChangeLine.Play(); m_soundChangeLine.Play();
break; break;
case SDLK_RIGHT: case SDLK_LEFT:
m_SnapDisplay.PrevSnapMode(); m_SnapDisplay.PrevSnapMode();
OnSnapModeChange(); OnSnapModeChange();
break; break;
case SDLK_LEFT: case SDLK_RIGHT:
m_SnapDisplay.NextSnapMode(); m_SnapDisplay.NextSnapMode();
OnSnapModeChange(); OnSnapModeChange();
break; break;
@@ -855,9 +791,8 @@ void ScreenEdit::InputEdit( const DeviceInput& DeviceI, const InputEventType typ
g_AreaMenu.lines[clear].bEnabled = bAreaSelected; g_AreaMenu.lines[clear].bEnabled = bAreaSelected;
g_AreaMenu.lines[quantize].bEnabled = bAreaSelected; g_AreaMenu.lines[quantize].bEnabled = bAreaSelected;
g_AreaMenu.lines[transform].bEnabled = bAreaSelected; g_AreaMenu.lines[transform].bEnabled = bAreaSelected;
g_AreaMenu.lines[play].bEnabled = bAreaSelected;
g_AreaMenu.lines[record].bEnabled = bAreaSelected; g_AreaMenu.lines[record].bEnabled = bAreaSelected;
g_AreaMenu.lines[insert_and_shift].bEnabled = !bAreaSelected;
g_AreaMenu.lines[delete_and_shift].bEnabled = !bAreaSelected;
SCREENMAN->MiniMenu( &g_AreaMenu, SM_BackFromAreaMenu ); SCREENMAN->MiniMenu( &g_AreaMenu, SM_BackFromAreaMenu );
} }
break; break;
@@ -865,38 +800,8 @@ void ScreenEdit::InputEdit( const DeviceInput& DeviceI, const InputEventType typ
SCREENMAN->MiniMenu( &g_MainMenu, SM_BackFromMainMenu ); SCREENMAN->MiniMenu( &g_MainMenu, SM_BackFromMainMenu );
break; break;
case SDLK_d: case SDLK_F1:
{ SCREENMAN->MiniMenu( &g_KeyboardShortcuts, SM_None );
Difficulty dc = Difficulty( (m_pNotes->GetDifficulty()+1)%NUM_DIFFICULTIES );
m_pNotes->SetDifficulty(dc);
}
break;
case SDLK_e:
SCREENMAN->TextEntry( SM_None, "Edit notes description.\nPress Enter to confirm,\nEscape to cancel.", m_pNotes->GetDescription(), ChangeDescription, NULL );
break;
case SDLK_b:
{
CString sOldBackground;
unsigned i;
for( i=0; i<m_pSong->m_BackgroundChanges.size(); i++ )
{
if( m_pSong->m_BackgroundChanges[i].m_fStartBeat == GAMESTATE->m_fSongBeat )
break;
}
if( i != m_pSong->m_BackgroundChanges.size() ) // there is already a BGChange here
sOldBackground = m_pSong->m_BackgroundChanges[i].m_sBGName;
SCREENMAN->TextEntry( SM_None, "Type a background name.\nPress Enter to keep,\nEscape to cancel.\nEnter an empty string to remove\nthe Background Change.", sOldBackground, AddBGChange, NULL );
}
break;
case SDLK_i:
if( GAMESTATE->m_SongOptions.m_AssistType==SongOptions::ASSIST_TICK )
GAMESTATE->m_SongOptions.m_AssistType = SongOptions::ASSIST_NONE;
else
GAMESTATE->m_SongOptions.m_AssistType = SongOptions::ASSIST_TICK;
break; break;
case SDLK_F7: case SDLK_F7:
@@ -1156,12 +1061,14 @@ void ScreenEdit::HandleScreenMessage( const ScreenMessage SM )
case SM_BackFromEditNotesStatistics: case SM_BackFromEditNotesStatistics:
HandleEditNotesStatisticsChoice( (EditNotesStatisticsChoice)ScreenMiniMenu::s_iLastLine, ScreenMiniMenu::s_iLastAnswers ); HandleEditNotesStatisticsChoice( (EditNotesStatisticsChoice)ScreenMiniMenu::s_iLastLine, ScreenMiniMenu::s_iLastAnswers );
break; break;
case SM_BackFromEditOptions:
HandleEditOptionsChoice( (EditOptionsChoice)ScreenMiniMenu::s_iLastLine, ScreenMiniMenu::s_iLastAnswers );
break;
case SM_BackFromEditSongInfo: case SM_BackFromEditSongInfo:
HandleEditSongInfoChoice( (EditSongInfoChoice)ScreenMiniMenu::s_iLastLine, ScreenMiniMenu::s_iLastAnswers ); HandleEditSongInfoChoice( (EditSongInfoChoice)ScreenMiniMenu::s_iLastLine, ScreenMiniMenu::s_iLastAnswers );
break; break;
case SM_RegainingFocus:
// coming back from PlayerOptions or SongOptions
m_fDestinationScrollSpeed = GAMESTATE->m_PlayerOptions[PLAYER_1].m_fScrollSpeed;
m_soundMusic.SetPlaybackRate( GAMESTATE->m_SongOptions.m_fMusicRate );
break;
} }
} }
@@ -1176,6 +1083,78 @@ void ScreenEdit::OnSnapModeChange()
GAMESTATE->m_fSongBeat -= NoteRowToBeat( iStepIndexHangover ); GAMESTATE->m_fSongBeat -= NoteRowToBeat( iStepIndexHangover );
} }
// Helper function for below
// Begin helper functions for InputEdit
void AddBGChange( CString sBGName )
{
Song* pSong = GAMESTATE->m_pCurSong;
unsigned i;
for( i=0; i<pSong->m_BackgroundChanges.size(); i++ )
{
if( pSong->m_BackgroundChanges[i].m_fStartBeat == GAMESTATE->m_fSongBeat )
break;
}
if( i != pSong->m_BackgroundChanges.size() ) // there is already a BGChange here
pSong->m_BackgroundChanges.erase( pSong->m_BackgroundChanges.begin()+i,
pSong->m_BackgroundChanges.begin()+i+1);
// create a new BGChange
if( sBGName != "" )
pSong->AddBackgroundChange( BackgroundChange(GAMESTATE->m_fSongBeat, sBGName) );
}
void ChangeDescription( CString sNew )
{
Notes* pNotes = GAMESTATE->m_pCurNotes[PLAYER_1];
pNotes->SetDescription(sNew);
}
void ChangeMainTitle( CString sNew )
{
Song* pSong = GAMESTATE->m_pCurSong;
pSong->m_sMainTitle = sNew;
}
void ChangeSubTitle( CString sNew )
{
Song* pSong = GAMESTATE->m_pCurSong;
pSong->m_sSubTitle = sNew;
}
void ChangeArtist( CString sNew )
{
Song* pSong = GAMESTATE->m_pCurSong;
pSong->m_sArtist = sNew;
}
void ChangeMainTitleTranslit( CString sNew )
{
Song* pSong = GAMESTATE->m_pCurSong;
pSong->m_sMainTitleTranslit = sNew;
}
void ChangeSubTitleTranslit( CString sNew )
{
Song* pSong = GAMESTATE->m_pCurSong;
pSong->m_sSubTitleTranslit = sNew;
}
void ChangeArtistTranslit( CString sNew )
{
Song* pSong = GAMESTATE->m_pCurSong;
pSong->m_sArtistTranslit = sNew;
}
// End helper functions
void ScreenEdit::HandleMainMenuChoice( MainMenuChoice c, int* iAnswers ) void ScreenEdit::HandleMainMenuChoice( MainMenuChoice c, int* iAnswers )
{ {
switch( c ) switch( c )
@@ -1186,7 +1165,7 @@ void ScreenEdit::HandleMainMenuChoice( MainMenuChoice c, int* iAnswers )
float fMusicSeconds = m_soundMusic.GetLengthSeconds(); float fMusicSeconds = m_soundMusic.GetLengthSeconds();
g_EditNotesStatistics.lines[difficulty].iDefaultOption = pNotes->GetDifficulty(); g_EditNotesStatistics.lines[difficulty].iDefaultOption = pNotes->GetDifficulty();
g_EditNotesStatistics.lines[meter].iDefaultOption = pNotes->GetMeter()+1; g_EditNotesStatistics.lines[meter].iDefaultOption = pNotes->GetMeter()-1;
strcpy( g_EditNotesStatistics.lines[description].szOptionsText[0], pNotes->GetDescription() ); strcpy( g_EditNotesStatistics.lines[description].szOptionsText[0], pNotes->GetDescription() );
strcpy( g_EditNotesStatistics.lines[tap_notes].szOptionsText[0], ssprintf("%d", m_NoteFieldEdit.GetNumTapNotes()) ); strcpy( g_EditNotesStatistics.lines[tap_notes].szOptionsText[0], ssprintf("%d", m_NoteFieldEdit.GetNumTapNotes()) );
strcpy( g_EditNotesStatistics.lines[hold_notes].szOptionsText[0], ssprintf("%d", m_NoteFieldEdit.GetNumHoldNotes()) ); strcpy( g_EditNotesStatistics.lines[hold_notes].szOptionsText[0], ssprintf("%d", m_NoteFieldEdit.GetNumHoldNotes()) );
@@ -1199,6 +1178,11 @@ void ScreenEdit::HandleMainMenuChoice( MainMenuChoice c, int* iAnswers )
} }
break; break;
case play_whole_song: case play_whole_song:
{
m_NoteFieldEdit.m_fBeginMarker = 0;
m_NoteFieldEdit.m_fEndMarker = m_NoteFieldEdit.GetLastBeat();
HandleAreaMenuChoice( play, NULL );
}
break; break;
case save: case save:
{ {
@@ -1213,21 +1197,43 @@ void ScreenEdit::HandleMainMenuChoice( MainMenuChoice c, int* iAnswers )
SOUNDMAN->PlayOnce( THEME->GetPathTo("Sounds","edit save") ); SOUNDMAN->PlayOnce( THEME->GetPathTo("Sounds","edit save") );
} }
break; break;
case editor_options:
SCREENMAN->MiniMenu( &g_EditOptions, SM_BackFromEditOptions );
break;
case player_options: case player_options:
SCREENMAN->AddNewScreenToTop( "ScreenPlayerOptions" );
break; break;
case song_options: case song_options:
SCREENMAN->AddNewScreenToTop( "ScreenSongOptions" );
break; break;
case edit_song_info: case edit_song_info:
{
Song* pSong = GAMESTATE->m_pCurSong;
strcpy( g_EditSongInfo.lines[main_title].szOptionsText[0], pSong->m_sMainTitle );
strcpy( g_EditSongInfo.lines[sub_title].szOptionsText[0], pSong->m_sSubTitle );
strcpy( g_EditSongInfo.lines[artist].szOptionsText[0], pSong->m_sArtist );
strcpy( g_EditSongInfo.lines[main_title_transliteration].szOptionsText[0], pSong->m_sMainTitleTranslit );
strcpy( g_EditSongInfo.lines[sub_title_transliteration].szOptionsText[0], pSong->m_sSubTitleTranslit );
strcpy( g_EditSongInfo.lines[artist_transliteration].szOptionsText[0], pSong->m_sArtistTranslit );
SCREENMAN->MiniMenu( &g_EditSongInfo, SM_BackFromEditSongInfo ); SCREENMAN->MiniMenu( &g_EditSongInfo, SM_BackFromEditSongInfo );
}
break; break;
case edit_bpm: case edit_bpm:
break; break;
case edit_stop: case edit_stop:
break; break;
case edit_bg_change: case edit_bg_change:
{
CString sOldBackground;
unsigned i;
for( i=0; i<m_pSong->m_BackgroundChanges.size(); i++ )
{
if( m_pSong->m_BackgroundChanges[i].m_fStartBeat == GAMESTATE->m_fSongBeat )
break;
}
if( i != m_pSong->m_BackgroundChanges.size() ) // there is already a BGChange here
sOldBackground = m_pSong->m_BackgroundChanges[i].m_sBGName;
SCREENMAN->TextEntry( SM_None, "Type a background name.\nPress Enter to keep,\nEscape to cancel.\nEnter an empty string to remove\nthe Background Change.", sOldBackground, AddBGChange, NULL );
}
break; break;
case play_preview_music: case play_preview_music:
SOUNDMAN->PlayMusic(""); SOUNDMAN->PlayMusic("");
@@ -1386,64 +1392,43 @@ void ScreenEdit::HandleAreaMenuChoice( AreaMenuChoice c, int* iAnswers )
void ScreenEdit::HandleEditNotesStatisticsChoice( EditNotesStatisticsChoice c, int* iAnswers ) void ScreenEdit::HandleEditNotesStatisticsChoice( EditNotesStatisticsChoice c, int* iAnswers )
{ {
Notes* pNotes = GAMESTATE->m_pCurNotes[PLAYER_1];
Difficulty dc = (Difficulty)iAnswers[difficulty];
pNotes->SetDifficulty( dc );
int iMeter = iAnswers[meter]+1;
pNotes->SetMeter( iMeter );
switch( c ) switch( c )
{ {
case difficulty:
break;
case meter:
break;
case description: case description:
SCREENMAN->TextEntry( SM_None, "Edit notes description.\nPress Enter to confirm,\nEscape to cancel.", m_pNotes->GetDescription(), ChangeDescription, NULL );
break; break;
case tap_notes:
break;
case hold_notes:
break;
case stream:
break;
case voltage:
break;
case air:
break;
case freeze:
break;
case chaos:
break;
default:
ASSERT(0);
};
} }
void ScreenEdit::HandleEditOptionsChoice( EditOptionsChoice c, int* iAnswers )
{
switch( c )
{
case zoom:
break;
case max_notes_per_row:
break;
case after_note_add:
break;
default:
ASSERT(0);
};
} }
void ScreenEdit::HandleEditSongInfoChoice( EditSongInfoChoice c, int* iAnswers ) void ScreenEdit::HandleEditSongInfoChoice( EditSongInfoChoice c, int* iAnswers )
{ {
Song* pSong = GAMESTATE->m_pCurSong;
switch( c ) switch( c )
{ {
case main_title: case main_title:
SCREENMAN->TextEntry( SM_None, "Edit main title.\nPress Enter to confirm,\nEscape to cancel.", pSong->m_sMainTitle, ChangeMainTitle, NULL );
break; break;
case sub_title: case sub_title:
SCREENMAN->TextEntry( SM_None, "Edit sub title.\nPress Enter to confirm,\nEscape to cancel.", pSong->m_sSubTitle, ChangeSubTitle, NULL );
break; break;
case artist: case artist:
SCREENMAN->TextEntry( SM_None, "Edit artist.\nPress Enter to confirm,\nEscape to cancel.", pSong->m_sArtist, ChangeArtist, NULL );
break; break;
case main_title_transliteration: case main_title_transliteration:
SCREENMAN->TextEntry( SM_None, "Edit main title transliteration.\nPress Enter to confirm,\nEscape to cancel.", pSong->m_sMainTitleTranslit, ChangeMainTitleTranslit, NULL );
break; break;
case sub_title_transliteration: case sub_title_transliteration:
SCREENMAN->TextEntry( SM_None, "Edit sub title transliteration.\nPress Enter to confirm,\nEscape to cancel.", pSong->m_sSubTitleTranslit, ChangeSubTitleTranslit, NULL );
break; break;
case artist_transliteration: case artist_transliteration:
SCREENMAN->TextEntry( SM_None, "Edit artist transliteration.\nPress Enter to confirm,\nEscape to cancel.", pSong->m_sArtistTranslit, ChangeArtistTranslit, NULL );
break; break;
default: default:
ASSERT(0); ASSERT(0);
-9
View File
@@ -108,7 +108,6 @@ public:
edit_notes_statistics, edit_notes_statistics,
play_whole_song, play_whole_song,
save, save,
editor_options,
player_options, player_options,
song_options, song_options,
edit_song_info, edit_song_info,
@@ -152,14 +151,6 @@ public:
}; };
void HandleEditNotesStatisticsChoice( EditNotesStatisticsChoice c, int* iAnswers ); void HandleEditNotesStatisticsChoice( EditNotesStatisticsChoice c, int* iAnswers );
enum EditOptionsChoice {
zoom,
max_notes_per_row,
after_note_add,
NUM_EDIT_OPTIONS_CHOICES
};
void HandleEditOptionsChoice( EditOptionsChoice c, int* iAnswers );
enum EditSongInfoChoice { enum EditSongInfoChoice {
main_title, main_title,
sub_title, sub_title,
+6 -7
View File
@@ -340,6 +340,12 @@ void ScreenManager::SetNewScreen( CString sClassName )
else GAMESTATE->m_bIsOnSystemMenu = false; else GAMESTATE->m_bIsOnSystemMenu = false;
} }
void ScreenManager::AddNewScreenToTop( CString sClassName )
{
Screen* pNewScreen = MakeNewScreen(sClassName);
m_ScreenStack.push_back( pNewScreen );
}
void ScreenManager::Prompt( ScreenMessage SM_SendWhenDone, CString sText, bool bYesNo, bool bDefaultAnswer, void(*OnYes)(), void(*OnNo)() ) void ScreenManager::Prompt( ScreenMessage SM_SendWhenDone, CString sText, bool bYesNo, bool bDefaultAnswer, void(*OnYes)(), void(*OnNo)() )
{ {
// add the new state onto the back of the array // add the new state onto the back of the array
@@ -389,13 +395,6 @@ void ScreenManager::SystemMessage( CString sMessage )
LOG->Trace( "WARNING: Didn't find an empty system messages slot." ); LOG->Trace( "WARNING: Didn't find an empty system messages slot." );
} }
/*
void ScreenManager::OverrideCreditsMessage( PlayerNumber pn, CString sNewString )
{
m_textCreditInfo[p].SetText( sNewString );
}
*/
void ScreenManager::RefreshCreditsMessages() void ScreenManager::RefreshCreditsMessages()
{ {
// update joined // update joined
+2 -1
View File
@@ -38,10 +38,11 @@ public:
void PrepNewScreen( CString sClassName ); void PrepNewScreen( CString sClassName );
void LoadPreppedScreen(); void LoadPreppedScreen();
void SetNewScreen( CString sClassName ); void SetNewScreen( CString sClassName );
void AddNewScreenToTop( CString sClassName );
void Prompt( ScreenMessage SM_SendWhenDone, CString sText, bool bYesNo = false, bool bDefaultAnswer = false, void(*OnYes)() = NULL, void(*OnNo)() = NULL ); void Prompt( ScreenMessage SM_SendWhenDone, CString sText, bool bYesNo = false, bool bDefaultAnswer = false, void(*OnYes)() = NULL, void(*OnNo)() = NULL );
void TextEntry( ScreenMessage SM_SendWhenDone, CString sQuestion, CString sInitialAnswer, void(*OnOK)(CString sAnswer) = NULL, void(*OnCanel)() = NULL ); void TextEntry( ScreenMessage SM_SendWhenDone, CString sQuestion, CString sInitialAnswer, void(*OnOK)(CString sAnswer) = NULL, void(*OnCanel)() = NULL );
void MiniMenu( MiniMenuDefinition* pDef, ScreenMessage SM_SendOnOK, ScreenMessage SM_SendOnCancel = SM_None ); void MiniMenu( MiniMenuDefinition* pDef, ScreenMessage SM_SendOnOK, ScreenMessage SM_SendOnCancel = SM_None );
void PopTopScreen( ScreenMessage SM ); void PopTopScreen( ScreenMessage SM = SM_RegainingFocus );
void SystemMessage( CString sMessage ); void SystemMessage( CString sMessage );
void SendMessageToTopScreen( ScreenMessage SM, float fDelay ); void SendMessageToTopScreen( ScreenMessage SM, float fDelay );
+1
View File
@@ -23,6 +23,7 @@ enum ScreenMessage {
SM_BeginFadingOut, SM_BeginFadingOut,
SM_GoToNextScreen, SM_GoToNextScreen,
SM_GoToPrevScreen, SM_GoToPrevScreen,
SM_RegainingFocus,
SM_User = 100 SM_User = 100
}; };
+43 -12
View File
@@ -24,6 +24,12 @@ const float LABEL_X = 200;
const float ANSWER_X = 440; const float ANSWER_X = 440;
const float SPACING_Y = 26; const float SPACING_Y = 26;
const float ZOOM_SELECTED = 0.7f;
const float ZOOM_NOT_SELECTED = 0.5f;
const RageColor COLOR_ENABLED = RageColor(1,1,1,1);
const RageColor COLOR_DISABLED = RageColor(0.5f,0.5f,0.5f,1);
const ScreenMessage SM_GoToOK = (ScreenMessage)(SM_User+1); const ScreenMessage SM_GoToOK = (ScreenMessage)(SM_User+1);
const ScreenMessage SM_GoToCancel = (ScreenMessage)(SM_User+2); const ScreenMessage SM_GoToCancel = (ScreenMessage)(SM_User+2);
@@ -56,6 +62,9 @@ ScreenMiniMenu::ScreenMiniMenu( MiniMenuDefinition* pDef, ScreenMessage SM_SendO
this->AddChild( &m_textTitle ); this->AddChild( &m_textTitle );
bool bMarkedFirstEnabledLine = false; bool bMarkedFirstEnabledLine = false;
m_iCurLine = 0;
float fLongestLabelPlusAnswer = 0;
for( int i=0; i<m_Def.iNumLines; i++ ) for( int i=0; i<m_Def.iNumLines; i++ )
{ {
@@ -66,20 +75,25 @@ ScreenMiniMenu::ScreenMiniMenu( MiniMenuDefinition* pDef, ScreenMessage SM_SendO
m_textLabel[i].LoadFromFont( THEME->GetPathTo("Fonts","normal") ); m_textLabel[i].LoadFromFont( THEME->GetPathTo("Fonts","normal") );
m_textLabel[i].SetText( line.szLabel ); m_textLabel[i].SetText( line.szLabel );
m_textLabel[i].SetXY( LABEL_X, fY ); m_textLabel[i].SetY( fY );
m_textLabel[i].SetZoom( 0.5f ); m_textLabel[i].SetZoom( ZOOM_NOT_SELECTED );
m_textLabel[i].SetHorizAlign( Actor::align_left ); m_textLabel[i].SetHorizAlign( Actor::align_left );
m_textLabel[i].SetDiffuse( line.bEnabled ? RageColor(1,1,1,1) : RageColor(0.5f,0.5f,0.5f,1) ); m_textLabel[i].SetDiffuse( line.bEnabled ? COLOR_ENABLED : COLOR_DISABLED );
this->AddChild( &m_textLabel[i] ); this->AddChild( &m_textLabel[i] );
m_textAnswer[i].LoadFromFont( THEME->GetPathTo("Fonts","normal") ); m_textAnswer[i].LoadFromFont( THEME->GetPathTo("Fonts","normal") );
m_textAnswer[i].SetText( line.szOptionsText[0] ); m_textAnswer[i].SetText( line.szOptionsText[line.iDefaultOption] );
m_textAnswer[i].SetXY( ANSWER_X, fY ); m_textAnswer[i].SetY( fY );
m_textAnswer[i].SetZoom( 0.5f ); m_textAnswer[i].SetZoom( ZOOM_NOT_SELECTED );
m_textAnswer[i].SetHorizAlign( Actor::align_right ); m_textAnswer[i].SetHorizAlign( Actor::align_right );
m_textAnswer[i].SetDiffuse( line.bEnabled ? RageColor(1,1,1,1) : RageColor(0.5f,0.5f,0.5f,1) ); m_textAnswer[i].SetDiffuse( line.bEnabled ? COLOR_ENABLED : COLOR_DISABLED );
this->AddChild( &m_textAnswer[i] ); this->AddChild( &m_textAnswer[i] );
fLongestLabelPlusAnswer = max(
fLongestLabelPlusAnswer,
m_textLabel[i].GetWidestLineWidthInSourcePixels() * ZOOM_SELECTED +
m_textAnswer[i].GetWidestLineWidthInSourcePixels() * ZOOM_SELECTED );
if( !bMarkedFirstEnabledLine && line.bEnabled ) if( !bMarkedFirstEnabledLine && line.bEnabled )
{ {
m_iCurLine = i; m_iCurLine = i;
@@ -90,6 +104,23 @@ ScreenMiniMenu::ScreenMiniMenu( MiniMenuDefinition* pDef, ScreenMessage SM_SendO
m_iCurAnswers[i] = line.iDefaultOption; m_iCurAnswers[i] = line.iDefaultOption;
} }
// adjust text spacing based on widest line
float fLabelX = LABEL_X;
float fAnswerX = ANSWER_X;
float fDefaultWidth = ANSWER_X - LABEL_X;
if( fLongestLabelPlusAnswer+20 > fDefaultWidth )
{
float fIncreaseBy = fLongestLabelPlusAnswer - fDefaultWidth + 20;
fLabelX -= fIncreaseBy/2;
fAnswerX += fIncreaseBy/2;
}
for( int i=0; i<m_Def.iNumLines; i++ )
{
m_textLabel[i].SetX( fLabelX );
m_textAnswer[i].SetX( fAnswerX );
}
SOUNDMAN->PlayOnce( THEME->GetPathTo("Sounds","menu prompt") ); SOUNDMAN->PlayOnce( THEME->GetPathTo("Sounds","menu prompt") );
} }
@@ -194,17 +225,17 @@ void ScreenMiniMenu::BeforeLineChanged()
{ {
m_textLabel[m_iCurLine].SetEffectNone(); m_textLabel[m_iCurLine].SetEffectNone();
m_textAnswer[m_iCurLine].SetEffectNone(); m_textAnswer[m_iCurLine].SetEffectNone();
m_textLabel[m_iCurLine].SetZoom( 0.5f ); m_textLabel[m_iCurLine].SetZoom( ZOOM_NOT_SELECTED );
m_textAnswer[m_iCurLine].SetZoom( 0.5f ); m_textAnswer[m_iCurLine].SetZoom( ZOOM_NOT_SELECTED );
SOUNDMAN->PlayOnce( THEME->GetPathTo("Sounds","mini menu row") );
} }
void ScreenMiniMenu::AfterLineChanged() void ScreenMiniMenu::AfterLineChanged()
{ {
m_textLabel[m_iCurLine].SetEffectGlowShift( 1.0f, RageColor(0,0.5f,0,1), RageColor(0,1,0,1) ); m_textLabel[m_iCurLine].SetEffectGlowShift( 1.0f, RageColor(0,0.5f,0,1), RageColor(0,1,0,1) );
m_textAnswer[m_iCurLine].SetEffectGlowShift( 1.0f, RageColor(0,0.5f,0,1), RageColor(0,1,0,1) ); m_textAnswer[m_iCurLine].SetEffectGlowShift( 1.0f, RageColor(0,0.5f,0,1), RageColor(0,1,0,1) );
m_textLabel[m_iCurLine].SetZoom( 0.7f ); m_textLabel[m_iCurLine].SetZoom( ZOOM_SELECTED );
m_textAnswer[m_iCurLine].SetZoom( 0.7f ); m_textAnswer[m_iCurLine].SetZoom( ZOOM_SELECTED );
SOUNDMAN->PlayOnce( THEME->GetPathTo("Sounds","mini menu row") );
} }
void ScreenMiniMenu::AfterAnswerChanged() void ScreenMiniMenu::AfterAnswerChanged()
+1 -1
View File
@@ -25,7 +25,7 @@ struct MiniMenuDefinition
int iNumLines; int iNumLines;
struct MiniMenuLine struct MiniMenuLine
{ {
char szLabel[40]; char szLabel[256];
bool bEnabled; bool bEnabled;
int iNumOptions; int iNumOptions;
int iDefaultOption; int iDefaultOption;
+6 -2
View File
@@ -179,7 +179,9 @@ void ScreenPlayerOptions::ExportOptions()
void ScreenPlayerOptions::GoToPrevState() void ScreenPlayerOptions::GoToPrevState()
{ {
if( GAMESTATE->m_PlayMode == PLAY_MODE_NONSTOP || if( GAMESTATE->m_bEditing )
SCREENMAN->PopTopScreen();
else if( GAMESTATE->m_PlayMode == PLAY_MODE_NONSTOP ||
GAMESTATE->m_PlayMode == PLAY_MODE_ONI || GAMESTATE->m_PlayMode == PLAY_MODE_ONI ||
GAMESTATE->m_PlayMode == PLAY_MODE_ENDLESS) GAMESTATE->m_PlayMode == PLAY_MODE_ENDLESS)
SCREENMAN->SetNewScreen( "ScreenSelectCourse" ); SCREENMAN->SetNewScreen( "ScreenSelectCourse" );
@@ -189,7 +191,9 @@ void ScreenPlayerOptions::GoToPrevState()
void ScreenPlayerOptions::GoToNextState() void ScreenPlayerOptions::GoToNextState()
{ {
if( PREFSMAN->m_bShowSongOptions == true ) if( GAMESTATE->m_bEditing )
SCREENMAN->PopTopScreen();
else if( PREFSMAN->m_bShowSongOptions == true )
SCREENMAN->SetNewScreen( "ScreenSongOptions" ); SCREENMAN->SetNewScreen( "ScreenSongOptions" );
else else
SCREENMAN->SetNewScreen( "ScreenStage" ); SCREENMAN->SetNewScreen( "ScreenStage" );
+7 -1
View File
@@ -107,13 +107,19 @@ void ScreenSongOptions::ExportOptions()
void ScreenSongOptions::GoToPrevState() void ScreenSongOptions::GoToPrevState()
{ {
SOUNDMAN->StopMusic();
if( GAMESTATE->m_bEditing )
SCREENMAN->PopTopScreen( SM_None );
else
SCREENMAN->SetNewScreen( "ScreenPlayerOptions" ); SCREENMAN->SetNewScreen( "ScreenPlayerOptions" );
} }
void ScreenSongOptions::GoToNextState() void ScreenSongOptions::GoToNextState()
{ {
SOUNDMAN->StopMusic(); SOUNDMAN->StopMusic();
if( GAMESTATE->m_bEditing )
SCREENMAN->PopTopScreen();
else
SCREENMAN->SetNewScreen( "ScreenStage" ); SCREENMAN->SetNewScreen( "ScreenStage" );
} }
+2
View File
@@ -406,6 +406,8 @@ bool HandleGlobalInputs( DeviceInput DeviceI, InputEventType type, GameInput Gam
case MENU_BUTTON_COIN: case MENU_BUTTON_COIN:
/* Handle a coin insertion. */ /* Handle a coin insertion. */
if( GAMESTATE->m_bEditing )
break;
if( type == IET_FIRST_PRESS ) return true; if( type == IET_FIRST_PRESS ) return true;
switch( PREFSMAN->m_CoinMode ) switch( PREFSMAN->m_CoinMode )