diff --git a/stepmania/src/ScreenEdit.cpp b/stepmania/src/ScreenEdit.cpp index 38720e16fc..ef4ff97d44 100644 --- a/stepmania/src/ScreenEdit.cpp +++ b/stepmania/src/ScreenEdit.cpp @@ -438,11 +438,11 @@ const MapEditToDI *ScreenEdit::GetCurrentDeviceInputMap() const { switch( m_EditState ) { + DEFAULT_FAIL( m_EditState ); case STATE_EDITING: return &m_EditMappingsDeviceInput; case STATE_PLAYING: return &m_PlayMappingsDeviceInput; case STATE_RECORDING: return &m_RecordMappingsDeviceInput; case STATE_RECORDING_PAUSED: return &m_RecordPausedMappingsDeviceInput; - default: FAIL_M( ssprintf("%i",m_EditState) ); } } @@ -450,11 +450,11 @@ const MapEditButtonToMenuButton *ScreenEdit::GetCurrentMenuButtonMap() const { switch( m_EditState ) { + DEFAULT_FAIL( m_EditState ); case STATE_EDITING: return &m_EditMappingsMenuButton; case STATE_PLAYING: return &m_PlayMappingsMenuButton; case STATE_RECORDING: return &m_RecordMappingsMenuButton; case STATE_RECORDING_PAUSED: return &m_RecordPausedMappingsMenuButton; - default: FAIL_M( ssprintf("%i",m_EditState) ); } } @@ -985,6 +985,7 @@ void ScreenEdit::UpdateTextInfo() sText += ssprintf( "%s:\n %.3f\n", CURRENT_SECOND.GetValue().c_str(), m_pSong->GetElapsedTimeFromBeat(GAMESTATE->m_fSongBeat) ); switch( EDIT_MODE.GetValue() ) { + DEFAULT_FAIL( EDIT_MODE.GetValue() ); case EditMode_Practice: break; case EditMode_CourseMods: @@ -992,8 +993,6 @@ void ScreenEdit::UpdateTextInfo() case EditMode_Full: sText += ssprintf( "%s:\n %s\n", SNAP_TO.GetValue().c_str(), sNoteType.c_str() ); break; - default: - ASSERT(0); } if( m_NoteFieldEdit.m_iBeginMarker != -1 ) @@ -1008,6 +1007,7 @@ void ScreenEdit::UpdateTextInfo() switch( EDIT_MODE.GetValue() ) { + DEFAULT_FAIL( EDIT_MODE.GetValue() ); case EditMode_Practice: case EditMode_CourseMods: case EditMode_Home: @@ -1019,8 +1019,6 @@ void ScreenEdit::UpdateTextInfo() if( m_pSong->m_sSubTitle.size() ) sText += ssprintf( "%s:\n %s\n", SUBTITLE.GetValue().c_str(), m_pSong->m_sSubTitle.c_str() ); break; - default: - ASSERT(0); } sText += ssprintf( "%s:\n %d\n", TAP_STEPS.GetValue().c_str(), m_NoteDataEdit.GetNumTapNotes() ); sText += ssprintf( "%s:\n %d\n", JUMPS.GetValue().c_str(), m_NoteDataEdit.GetNumJumps() ); @@ -1030,6 +1028,7 @@ void ScreenEdit::UpdateTextInfo() sText += ssprintf( "%s:\n %d\n", ROLLS.GetValue().c_str(), m_NoteDataEdit.GetNumRolls() ); switch( EDIT_MODE.GetValue() ) { + DEFAULT_FAIL( EDIT_MODE.GetValue() ); case EditMode_Practice: case EditMode_CourseMods: case EditMode_Home: @@ -1039,8 +1038,6 @@ void ScreenEdit::UpdateTextInfo() sText += ssprintf( "%s:\n %.3f secs\n", PREVIEW_START.GetValue().c_str(), m_pSong->m_fMusicSampleStartSeconds ); sText += ssprintf( "%s:\n %.3f secs\n", PREVIEW_LENGTH.GetValue().c_str(), m_pSong->m_fMusicSampleLengthSeconds ); break; - default: - ASSERT(0); } m_textInfo.SetText( sText ); @@ -1081,6 +1078,7 @@ void ScreenEdit::Input( const InputEventPlus &input ) switch( m_EditState ) { + DEFAULT_FAIL( m_EditState ); case STATE_EDITING: InputEdit( input, EditB ); m_bTextInfoNeedsUpdate = true; @@ -1094,7 +1092,6 @@ void ScreenEdit::Input( const InputEventPlus &input ) case STATE_PLAYING: InputPlay( input, EditB ); break; - default: ASSERT(0); } } @@ -1102,14 +1099,13 @@ static void ShiftToRightSide( int &iCol, int iNumTracks ) { switch( GAMESTATE->GetCurrentStyle()->m_StyleType ) { + DEFAULT_FAIL( GAMESTATE->GetCurrentStyle()->m_StyleType ); case ONE_PLAYER_ONE_SIDE: break; case TWO_PLAYERS_TWO_SIDES: case ONE_PLAYER_TWO_SIDES: iCol += iNumTracks/2; break; - default: - ASSERT(0); } } @@ -1139,6 +1135,7 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB ) switch( EditB ) { + DEFAULT_FAIL( EditB ); case EDIT_BUTTON_COLUMN_0: case EDIT_BUTTON_COLUMN_1: case EDIT_BUTTON_COLUMN_2: @@ -1251,6 +1248,7 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB ) float fBeatsToMove=0.f; switch( EditB ) { + DEFAULT_FAIL( EditB ); case EDIT_BUTTON_SCROLL_UP_LINE: case EDIT_BUTTON_SCROLL_DOWN_LINE: fBeatsToMove = NoteTypeToBeat( m_SnapDisplay.GetNoteType() ); @@ -1390,6 +1388,7 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB ) switch( EditB ) { + DEFAULT_FAIL( EditB ); case EDIT_BUTTON_OPEN_PREV_STEPS: if( it==vSteps.begin() ) { @@ -1406,7 +1405,6 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB ) return; } break; - default: ASSERT(0); return; } pSteps = *it; @@ -1432,9 +1430,9 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB ) float fDelta; switch( EditB ) { + DEFAULT_FAIL( EditB ); case EDIT_BUTTON_BPM_UP: fDelta = +0.020f; break; case EDIT_BUTTON_BPM_DOWN: fDelta = -0.020f; break; - default: ASSERT(0); return; } if( EditIsBeingPressed( EDIT_BUTTON_ADJUST_FINE ) ) { @@ -1460,9 +1458,9 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB ) float fDelta; switch( EditB ) { + DEFAULT_FAIL( EditB ); case EDIT_BUTTON_STOP_UP: fDelta = +0.020f; break; case EDIT_BUTTON_STOP_DOWN: fDelta = -0.020f; break; - default: ASSERT(0); return; } if( EditIsBeingPressed( EDIT_BUTTON_ADJUST_FINE ) ) { @@ -1505,9 +1503,9 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB ) float fDelta; switch( EditB ) { + DEFAULT_FAIL( EditB ); case EDIT_BUTTON_OFFSET_DOWN: fDelta = -0.02f; break; case EDIT_BUTTON_OFFSET_UP: fDelta = +0.02f; break; - default: ASSERT(0); return; } if( EditIsBeingPressed( EDIT_BUTTON_ADJUST_FINE ) ) { @@ -1533,11 +1531,11 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB ) float fDelta; switch( EditB ) { + DEFAULT_FAIL( EditB ); case EDIT_BUTTON_SAMPLE_START_DOWN: fDelta = -0.02f; break; case EDIT_BUTTON_SAMPLE_START_UP: fDelta = +0.02f; break; case EDIT_BUTTON_SAMPLE_LENGTH_DOWN: fDelta = -0.02f; break; case EDIT_BUTTON_SAMPLE_LENGTH_UP: fDelta = +0.02f; break; - default: ASSERT(0); return; } switch( input.type ) { @@ -1565,6 +1563,7 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB ) case EDIT_BUTTON_OPEN_BGCHANGE_LAYER2_MENU: switch( EditB ) { + DEFAULT_FAIL( EditB ); case EDIT_BUTTON_OPEN_BGCHANGE_LAYER1_MENU: g_CurrentBGChangeLayer = BACKGROUND_LAYER_1; break; case EDIT_BUTTON_OPEN_BGCHANGE_LAYER2_MENU: g_CurrentBGChangeLayer = BACKGROUND_LAYER_2; break; } @@ -1879,6 +1878,7 @@ void ScreenEdit::InputRecord( const InputEventPlus &input, EditButton EditB ) switch( input.type ) { + DEFAULT_FAIL( input.type ); case IET_FIRST_PRESS: { if( EditIsBeingPressed(EDIT_BUTTON_REMOVE_NOTE) ) @@ -1915,6 +1915,7 @@ void ScreenEdit::InputRecord( const InputEventPlus &input, EditButton EditB ) case IET_SLOW_REPEAT: case IET_FAST_REPEAT: case IET_RELEASE: + case IET_LEVEL_CHANGED: // don't add or extend holds here; we do it in Update() break; } @@ -1927,6 +1928,7 @@ void ScreenEdit::InputRecordPaused( const InputEventPlus &input, EditButton Edit switch( EditB ) { + DEFAULT_FAIL( EditB ); case EDIT_BUTTON_UNDO: /* We've already actually committed changes to m_NoteDataEdit, so all we have * to do to undo is Undo() as usual, and copy the note data back in. */ @@ -1980,6 +1982,7 @@ void ScreenEdit::InputPlay( const InputEventPlus &input, EditButton EditB ) switch( EditB ) { + DEFAULT_FAIL( EditB ); case EDIT_BUTTON_RETURN_TO_EDIT: /* When exiting play mode manually, leave the cursor where it is. */ m_fBeatToReturnTo = GAMESTATE->m_fSongBeat; @@ -2001,9 +2004,9 @@ void ScreenEdit::InputPlay( const InputEventPlus &input, EditButton EditB ) float fOffsetDelta; switch( EditB ) { + DEFAULT_FAIL( EditB ); case EDIT_BUTTON_OFFSET_DOWN: fOffsetDelta = -0.020f; break; case EDIT_BUTTON_OFFSET_UP: fOffsetDelta = +0.020f; break; - default: ASSERT(0); return; } if( EditIsBeingPressed( EDIT_BUTTON_ADJUST_FINE ) ) @@ -2119,6 +2122,7 @@ void ScreenEdit::TransitionEditState( EditState em ) switch( em ) { + DEFAULT_FAIL( em ); case STATE_EDITING: /* Important: people will stop playing, change the BG and start again; make sure we reload */ m_Background.Unload(); @@ -2157,14 +2161,11 @@ void ScreenEdit::TransitionEditState( EditState em ) } case STATE_RECORDING_PAUSED: break; - default: - ASSERT(0); } switch( em ) { case STATE_PLAYING: - { GAMESTATE->RestoreSelectedOptions(); GAMESTATE->StoreStageOptions(); @@ -2191,11 +2192,8 @@ void ScreenEdit::TransitionEditState( EditState em ) } break; - } - case STATE_RECORDING: case STATE_RECORDING_PAUSED: - { // initialize m_NoteFieldRecord m_NoteDataRecord.CopyAll( m_NoteDataEdit ); @@ -2205,7 +2203,6 @@ void ScreenEdit::TransitionEditState( EditState em ) break; } - } // // Show/hide depending on em @@ -2491,6 +2488,7 @@ void ScreenEdit::HandleScreenMessage( const ScreenMessage SM ) { switch( ScreenPrompt::s_LastAnswer ) { + DEFAULT_FAIL( ScreenPrompt::s_LastAnswer ); case ANSWER_YES: // This will send SM_SaveSuccessful or SM_SaveFailed. HandleMainMenuChoice( ScreenEdit::save_on_exit ); @@ -2639,6 +2637,7 @@ void ScreenEdit::HandleMainMenuChoice( MainMenuChoice c, const vector &iAns { switch( c ) { + DEFAULT_FAIL( c ); case play_selection: if( m_NoteFieldEdit.m_iBeginMarker!=-1 && m_NoteFieldEdit.m_iEndMarker!=-1 ) HandleAreaMenuChoice( play ); @@ -2742,6 +2741,7 @@ void ScreenEdit::HandleMainMenuChoice( MainMenuChoice c, const vector &iAns switch( EDIT_MODE.GetValue() ) { + DEFAULT_FAIL( EDIT_MODE.GetValue() ); case EditMode_Home: { ASSERT( pSteps->IsAnEdit() ); @@ -2786,8 +2786,6 @@ void ScreenEdit::HandleMainMenuChoice( MainMenuChoice c, const vector &iAns case EditMode_CourseMods: case EditMode_Practice: break; - default: - ASSERT(0); } m_soundSave.Play(); @@ -2838,6 +2836,7 @@ void ScreenEdit::HandleMainMenuChoice( MainMenuChoice c, const vector &iAns case exit: switch( EDIT_MODE.GetValue() ) { + DEFAULT_FAIL( EDIT_MODE.GetValue() ); case EditMode_Full: case EditMode_Home: if( m_bHasUndo ) @@ -2849,12 +2848,8 @@ void ScreenEdit::HandleMainMenuChoice( MainMenuChoice c, const vector &iAns case EditMode_CourseMods: SCREENMAN->SendMessageToTopScreen( SM_DoExit ); break; - default: - ASSERT(0); } break; - default: - ASSERT(0); }; } @@ -2863,6 +2858,7 @@ void ScreenEdit::HandleAreaMenuChoice( AreaMenuChoice c, const vector &iAns bool bSaveUndo = false; switch( c ) { + DEFAULT_FAIL( c ); case cut: case copy: case play: @@ -2886,8 +2882,6 @@ void ScreenEdit::HandleAreaMenuChoice( AreaMenuChoice c, const vector &iAns case convert_pause_to_beat: bSaveUndo = true; break; - default: - FAIL_M( ssprintf("%i", c) ); } // We call HandleAreaMenuChoice recursively. Only the outermost HandleAreaMenuChoice @@ -2900,6 +2894,7 @@ void ScreenEdit::HandleAreaMenuChoice( AreaMenuChoice c, const vector &iAns switch( c ) { + DEFAULT_FAIL( c ); case cut: { HandleAreaMenuChoice( copy ); @@ -2919,6 +2914,7 @@ void ScreenEdit::HandleAreaMenuChoice( AreaMenuChoice c, const vector &iAns int iDestFirstRow = -1; switch( c ) { + DEFAULT_FAIL( c ); case paste_at_current_beat: iDestFirstRow = BeatToNoteRow( GAMESTATE->m_fSongBeat ); break; @@ -2926,8 +2922,6 @@ void ScreenEdit::HandleAreaMenuChoice( AreaMenuChoice c, const vector &iAns ASSERT( m_NoteFieldEdit.m_iBeginMarker!=-1 ); iDestFirstRow = m_NoteFieldEdit.m_iBeginMarker; break; - default: - ASSERT(0); } int iRowsToCopy = m_Clipboard.GetLastRow()+1; @@ -2955,12 +2949,12 @@ void ScreenEdit::HandleAreaMenuChoice( AreaMenuChoice c, const vector &iAns TurnType tt = (TurnType)iAnswers[c]; switch( tt ) { + DEFAULT_FAIL( tt ); case left: NoteDataUtil::Turn( m_Clipboard, st, NoteDataUtil::left ); break; case right: NoteDataUtil::Turn( m_Clipboard, st, NoteDataUtil::right ); break; case mirror: NoteDataUtil::Turn( m_Clipboard, st, NoteDataUtil::mirror ); break; case shuffle: NoteDataUtil::Turn( m_Clipboard, st, NoteDataUtil::shuffle ); break; case super_shuffle: NoteDataUtil::Turn( m_Clipboard, st, NoteDataUtil::super_shuffle ); break; - default: ASSERT(0); } HandleAreaMenuChoice( paste_at_begin_marker ); @@ -2976,6 +2970,7 @@ void ScreenEdit::HandleAreaMenuChoice( AreaMenuChoice c, const vector &iAns switch( tt ) { + DEFAULT_FAIL( tt ); case noholds: NoteDataUtil::RemoveHoldNotes( m_NoteDataEdit, iBeginRow, iEndRow ); break; case nomines: NoteDataUtil::RemoveMines( m_NoteDataEdit, iBeginRow, iBeginRow ); break; case little: NoteDataUtil::Little( m_NoteDataEdit, iBeginRow, iEndRow ); break; @@ -2993,7 +2988,6 @@ void ScreenEdit::HandleAreaMenuChoice( AreaMenuChoice c, const vector &iAns case nohands: NoteDataUtil::RemoveHands( m_NoteDataEdit, iBeginRow, iEndRow ); break; case noquads: NoteDataUtil::RemoveQuads( m_NoteDataEdit, iBeginRow, iEndRow ); break; case nostretch: NoteDataUtil::RemoveStretch( m_NoteDataEdit, st, iBeginRow, iBeginRow );break; - default: ASSERT(0); } // bake in the additions @@ -3008,6 +3002,7 @@ void ScreenEdit::HandleAreaMenuChoice( AreaMenuChoice c, const vector &iAns AlterType at = (AlterType)iAnswers[c]; switch( at ) { + DEFAULT_FAIL( at ); case autogen_to_fill_width: { NoteData temp( m_Clipboard ); @@ -3029,7 +3024,6 @@ void ScreenEdit::HandleAreaMenuChoice( AreaMenuChoice c, const vector &iAns case collapse_left: NoteDataUtil::CollapseLeft( m_Clipboard ); break; case shift_left: NoteDataUtil::ShiftLeft( m_Clipboard ); break; case shift_right: NoteDataUtil::ShiftRight( m_Clipboard ); break; - default: ASSERT(0); } HandleAreaMenuChoice( paste_at_begin_marker ); @@ -3046,17 +3040,18 @@ void ScreenEdit::HandleAreaMenuChoice( AreaMenuChoice c, const vector &iAns float fScale = -1; switch( at ) { + DEFAULT_FAIL( at ); case compress_2x: fScale = 0.5f; break; case compress_3_2: fScale = 2.0f/3; break; case compress_4_3: fScale = 0.75f; break; case expand_4_3: fScale = 4.0f/3; break; case expand_3_2: fScale = 1.5f; break; case expand_2x: fScale = 2; break; - default: ASSERT(0); } switch( at ) { + DEFAULT_FAIL( at ); case compress_2x: NoteDataUtil::Scale( m_Clipboard, fScale ); break; case compress_3_2: NoteDataUtil::Scale( m_Clipboard, fScale ); break; case compress_4_3: NoteDataUtil::Scale( m_Clipboard, fScale ); break; @@ -3167,8 +3162,6 @@ void ScreenEdit::HandleAreaMenuChoice( AreaMenuChoice c, const vector &iAns case undo: Undo(); break; - default: - FAIL_M( ssprintf("%i", c) ); }; if( bSaveUndo ) @@ -3213,6 +3206,7 @@ void ScreenEdit::HandleSongInformationChoice( SongInformationChoice c, const vec switch( c ) { + DEFAULT_FAIL(c); case main_title: ScreenTextEntry::TextEntry( SM_None, ENTER_MAIN_TITLE, pSong->m_sMainTitle, 100, NULL, ChangeMainTitle, NULL ); break; @@ -3234,8 +3228,6 @@ void ScreenEdit::HandleSongInformationChoice( SongInformationChoice c, const vec case artist_transliteration: ScreenTextEntry::TextEntry( SM_None, ENTER_ARTIST_TRANSLIT, pSong->m_sArtistTranslit, 100, NULL, ChangeArtistTranslit, NULL ); break; - default: - ASSERT(0); }; } @@ -3262,7 +3254,7 @@ void ScreenEdit::HandleBGChangeChoice( BGChangeChoice c, const vector &iAns newChange.m_def.m_sColor2 = g_BackgroundChange.rows[color2].choices[iAnswers[color2]]; switch( iAnswers[file1_type] ) { - default: ASSERT(0); + DEFAULT_FAIL( iAnswers[file1_type] ); case none: newChange.m_def.m_sFile1 = ""; break; case dynamic_random: newChange.m_def.m_sFile1 = RANDOM_BACKGROUND_FILE; break; case baked_random: newChange.m_def.m_sFile1 = GetOneBakedRandomFile( m_pSong ); break; @@ -3281,7 +3273,7 @@ void ScreenEdit::HandleBGChangeChoice( BGChangeChoice c, const vector &iAns } switch( iAnswers[file2_type] ) { - default: ASSERT(0); + DEFAULT_FAIL(iAnswers[file2_type]); case none: newChange.m_def.m_sFile2 = ""; break; case dynamic_random: newChange.m_def.m_sFile2 = RANDOM_BACKGROUND_FILE; break; case baked_random: newChange.m_def.m_sFile2 = GetOneBakedRandomFile( m_pSong ); break; @@ -3457,6 +3449,7 @@ float ScreenEdit::GetMaximumBeatForNewNote() const { switch( EDIT_MODE.GetValue() ) { + DEFAULT_FAIL( EDIT_MODE.GetValue() ); case EditMode_Practice: case EditMode_CourseMods: case EditMode_Home: @@ -3473,8 +3466,6 @@ float ScreenEdit::GetMaximumBeatForNewNote() const } case EditMode_Full: return NoteRowToBeat(MAX_NOTE_ROW); - default: - ASSERT(0); return 0; } } diff --git a/stepmania/src/global.h b/stepmania/src/global.h index 129c2c78cb..8b9e6ed657 100644 --- a/stepmania/src/global.h +++ b/stepmania/src/global.h @@ -105,6 +105,9 @@ void NORETURN sm_crash( const char *reason = "Internal error" ); #define ASSERT(COND) ASSERT_M((COND), "Assertion '" #COND "' failed") #endif +/* Use this to catch switching on invalid values */ +#define DEFAULT_FAIL(i) default: FAIL_M( ssprintf("%i", i) ) + void ShowWarning( const char *file, int line, const char *message ); // don't pull in LOG here #define WARN(MESSAGE) (ShowWarning(__FILE__, __LINE__, MESSAGE))