From f951a8706801fecedc32296fe3eeece7d2b67c72 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Sun, 13 Mar 2011 22:24:43 -0400 Subject: [PATCH] sm124futures: Working tap note cycling. The code in NoteTypes could use a review: perhaps the Type definition should be taken out of the struct to try to make it more consistent? --- src/NoteTypes.h | 25 +++++++++++++++++++--- src/ScreenEdit.cpp | 53 ++++++++++++++++++++++++++++------------------ src/ScreenEdit.h | 4 ++++ 3 files changed, 58 insertions(+), 24 deletions(-) diff --git a/src/NoteTypes.h b/src/NoteTypes.h index 7fd893a230..4c23f1576f 100644 --- a/src/NoteTypes.h +++ b/src/NoteTypes.h @@ -204,9 +204,28 @@ extern TapNote TAP_ORIGINAL_FAKE; // 'F' extern TapNote TAP_ADDITION_TAP; extern TapNote TAP_ADDITION_MINE; -const RString& TapNoteTypeToString( TapNote::Type tn ); -const RString& TapNoteTypeToLocalizedString( TapNote::Type tn ); -LuaDeclareType( TapNote::Type ); +/** + * @brief Retrieve the string representing the TapNote Type. + * + * TODO: Find a way to standardize this with the other enum string calls. + * @param tn the TapNote's type. + * @return the intended string. */ +inline const RString TapNoteTypeToString( TapNote::Type tn ) +{ + switch( tn ) + { + case TapNote::empty: return RString("empty"); + case TapNote::tap: return RString("tap"); + case TapNote::hold_head: return RString("hold_head"); + case TapNote::hold_tail: return RString("hold_tail"); + case TapNote::mine: return RString("mine"); + case TapNote::lift: return RString("lift"); + case TapNote::attack: return RString("attack"); + case TapNote::autoKeysound: return RString("autoKeysound"); + case TapNote::fake: return RString("fake"); + default: return RString(); + } +} /** * @brief The number of tracks allowed. diff --git a/src/ScreenEdit.cpp b/src/ScreenEdit.cpp index 7e50cc8faf..7a9d0cf0c1 100644 --- a/src/ScreenEdit.cpp +++ b/src/ScreenEdit.cpp @@ -16,6 +16,7 @@ #include "LocalizedString.h" #include "NoteDataUtil.h" #include "NoteSkinManager.h" +#include "NoteTypes.h" #include "NotesWriterSM.h" #include "PrefsManager.h" #include "RageSoundManager.h" @@ -733,6 +734,8 @@ void ScreenEdit::Init() m_pSteps = GAMESTATE->m_pCurSteps[PLAYER_1]; m_bReturnToRecordMenuAfterPlay = false; m_fBeatToReturnTo = 0; + + m_selectedTap = TAP_ORIGINAL_TAP; GAMESTATE->m_bGameplayLeadIn.Set( true ); GAMESTATE->m_EditMode = EDIT_MODE.GetValue(); @@ -1027,6 +1030,7 @@ static LocalizedString DESCRIPTION("ScreenEdit", "Description"); static LocalizedString CHART_STYLE("ScreenEdit", "Chart Style"); static LocalizedString MAIN_TITLE("ScreenEdit", "Main title"); static LocalizedString SUBTITLE("ScreenEdit", "Subtitle"); +static LocalizedString TAP_NOTE_TYPE("ScreenEdit", "Tap Note"); static LocalizedString TAP_STEPS("ScreenEdit", "Tap Steps"); static LocalizedString JUMPS("ScreenEdit", "Jumps"); static LocalizedString HANDS("ScreenEdit", "Hands"); @@ -1051,6 +1055,7 @@ static ThemeMetric DESCRIPTION_FORMAT("ScreenEdit", "DescriptionFormat" static ThemeMetric CHART_STYLE_FORMAT("ScreenEdit", "ChartStyleFormat"); static ThemeMetric MAIN_TITLE_FORMAT("ScreenEdit", "MainTitleFormat"); static ThemeMetric SUBTITLE_FORMAT("ScreenEdit", "SubtitleFormat"); +static ThemeMetric TAP_NOTE_TYPE_FORMAT("ScreenEdit", "TapNoteTypeFormat"); static ThemeMetric NUM_STEPS_FORMAT("ScreenEdit", "NumStepsFormat"); static ThemeMetric NUM_JUMPS_FORMAT("ScreenEdit", "NumJumpsFormat"); static ThemeMetric NUM_HOLDS_FORMAT("ScreenEdit", "NumHoldsFormat"); @@ -1119,6 +1124,7 @@ void ScreenEdit::UpdateTextInfo() sText += ssprintf( MAIN_TITLE_FORMAT.GetValue(), MAIN_TITLE.GetValue().c_str(), m_pSong->m_sMainTitle.c_str() ); if( m_pSong->m_sSubTitle.size() ) sText += ssprintf( SUBTITLE_FORMAT.GetValue(), SUBTITLE.GetValue().c_str(), m_pSong->m_sSubTitle.c_str() ); + sText += ssprintf( TAP_NOTE_TYPE_FORMAT.GetValue(), TAP_NOTE_TYPE.GetValue().c_str(), TapNoteTypeToString( m_selectedTap.type ).c_str() ); break; } sText += ssprintf( NUM_STEPS_FORMAT.GetValue(), TAP_STEPS.GetValue().c_str(), m_NoteDataEdit.GetNumTapNotes() ); @@ -1299,43 +1305,48 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB ) m_NoteDataEdit.SetTapNote( iCol, iSongIndex, TAP_EMPTY ); // Don't CheckNumberOfNotesAndUndo. We don't want to revert any change that removes notes. } - else if( EditIsBeingPressed(EDIT_BUTTON_LAY_MINE_OR_ROLL) ) - { - m_soundAddNote.Play(); - SetDirty( true ); - SaveUndo(); - TapNote tn = TAP_ORIGINAL_MINE; - tn.pn = m_InputPlayerNumber; - m_NoteDataEdit.SetTapNote( iCol, iSongIndex, tn ); - CheckNumberOfNotesAndUndo(); - } else if( EditIsBeingPressed(EDIT_BUTTON_LAY_TAP_ATTACK) ) { g_iLastInsertTapAttackTrack = iCol; EditMiniMenu( &g_InsertTapAttack, SM_BackFromInsertTapAttack ); } - else if( EditIsBeingPressed(EDIT_BUTTON_LAY_LIFT) ) - { - m_soundAddNote.Play(); - SetDirty( true ); - SaveUndo(); - TapNote tn = TAP_ORIGINAL_LIFT; - tn.pn = m_InputPlayerNumber; - m_NoteDataEdit.SetTapNote( iCol, iSongIndex, tn ); - CheckNumberOfNotesAndUndo(); - } else { m_soundAddNote.Play(); SetDirty( true ); SaveUndo(); - TapNote tn = TAP_ORIGINAL_TAP; + TapNote tn = m_selectedTap; tn.pn = m_InputPlayerNumber; m_NoteDataEdit.SetTapNote(iCol, iSongIndex, tn ); CheckNumberOfNotesAndUndo(); } } break; + + case EDIT_BUTTON_CYCLE_TAP_LEFT: + { + switch ( m_selectedTap.type ) + { + case TapNote::tap: m_selectedTap = TAP_ORIGINAL_FAKE; break; + case TapNote::mine: m_selectedTap = TAP_ORIGINAL_TAP; break; + case TapNote::lift: m_selectedTap = TAP_ORIGINAL_MINE; break; + case TapNote::fake: m_selectedTap = TAP_ORIGINAL_LIFT; break; + DEFAULT_FAIL( m_selectedTap.type ); + } + break; + } + case EDIT_BUTTON_CYCLE_TAP_RIGHT: + { + switch ( m_selectedTap.type ) + { + case TapNote::tap: m_selectedTap = TAP_ORIGINAL_MINE; break; + case TapNote::mine: m_selectedTap = TAP_ORIGINAL_LIFT; break; + case TapNote::lift: m_selectedTap = TAP_ORIGINAL_FAKE; break; + case TapNote::fake: m_selectedTap = TAP_ORIGINAL_TAP; break; + DEFAULT_FAIL( m_selectedTap.type ); + } + break; + } case EDIT_BUTTON_SCROLL_SPEED_UP: case EDIT_BUTTON_SCROLL_SPEED_DOWN: { diff --git a/src/ScreenEdit.h b/src/ScreenEdit.h index d68d2dafd4..fae15b9f5b 100644 --- a/src/ScreenEdit.h +++ b/src/ScreenEdit.h @@ -9,6 +9,7 @@ #include "Background.h" #include "Foreground.h" #include "NoteField.h" +#include "NoteTypes.h" #include "Song.h" #include "Steps.h" #include "ThemeMetric.h" @@ -236,6 +237,9 @@ protected: SnapDisplay m_SnapDisplay; BitmapText m_textInputTips; + + /** @brief The current TapNote that would be inserted. */ + TapNote m_selectedTap; void UpdateTextInfo(); BitmapText m_textInfo; // status information that changes