From 3e140b0af9bb679b3c4161790d1eaddb3a1bba90 Mon Sep 17 00:00:00 2001 From: Chris Danford Date: Sat, 25 Sep 2004 07:59:56 +0000 Subject: [PATCH] remove hard-coded track limit in NoteData --- stepmania/src/GameManager.cpp | 23 ++++++++++ stepmania/src/NoteData.cpp | 86 +++++++++++++++++------------------ stepmania/src/NoteData.h | 7 +-- stepmania/src/NoteTypes.h | 24 +--------- 4 files changed, 71 insertions(+), 69 deletions(-) diff --git a/stepmania/src/GameManager.cpp b/stepmania/src/GameManager.cpp index 4f711038cc..b676a42f5a 100644 --- a/stepmania/src/GameManager.cpp +++ b/stepmania/src/GameManager.cpp @@ -16,6 +16,29 @@ GameManager* GAMEMAN = NULL; // global and accessable from anywhere in our program +enum +{ + TRACK_1 = 0, + TRACK_2, + TRACK_3, + TRACK_4, + TRACK_5, + TRACK_6, + TRACK_7, + TRACK_8, + TRACK_9, + TRACK_10, + TRACK_11, + TRACK_12, + TRACK_13, // BMS reader needs 13 tracks + // MD 10/26/03 - BMS reader needs a whole lot more than 13 tracks - more like 16 + // because we have 11-16, 18, 19, 21-26, 28, 29 for IIDX double (bm-double7) + TRACK_14, + TRACK_15, + TRACK_16, + // MD 10/26/03 end +}; + enum { GAME_DANCE, // Dance Dance Revolution diff --git a/stepmania/src/NoteData.cpp b/stepmania/src/NoteData.cpp index 3f124e287f..f247b05abb 100644 --- a/stepmania/src/NoteData.cpp +++ b/stepmania/src/NoteData.cpp @@ -12,14 +12,13 @@ NoteData::NoteData() { - m_iNumTracks = 0; Init(); } void NoteData::Init() { ClearAll(); - m_iNumTracks = 0; // must do this after calling ClearAll()! + m_TapNotes.clear(); } NoteData::~NoteData() @@ -28,26 +27,25 @@ NoteData::~NoteData() int NoteData::GetNumTracks() const { - return m_iNumTracks; + return m_TapNotes.size(); } void NoteData::SetNumTracks( int iNewNumTracks ) { - m_iNumTracks = iNewNumTracks; + ASSERT( iNewNumTracks > 0 ); - // Make sure that all tracks are of the same length - ASSERT( m_iNumTracks > 0 ); - int rows = m_TapNotes[0].size(); + m_TapNotes.resize( iNewNumTracks ); - for( int t=0; t= 0; --h ) if( m_HoldNotes[h].iTrack >= iNewNumTracks ) m_HoldNotes.erase( m_HoldNotes.begin()+h ); @@ -58,17 +56,17 @@ void NoteData::SetNumTracks( int iNewNumTracks ) void NoteData::ClearRange( int iNoteIndexBegin, int iNoteIndexEnd ) { this->ConvertHoldNotesTo4s(); - for( int c=0; cConvert4sToHoldNotes(); } void NoteData::ClearAll() { - for( int t=0; tm_iNumTracks == m_iNumTracks ); + ASSERT( pFrom->GetNumTracks() == GetNumTracks() ); NoteData From, To; From.To4s( *pFrom ); @@ -88,7 +86,7 @@ void NoteData::CopyRange( const NoteData* pFrom, int iFromIndexBegin, int iFromI while( f<=iFromIndexEnd ) { - for( int c=0; cm_TapNotes[c]; m_HoldNotes = pFrom->m_HoldNotes; m_AttackMap = pFrom->m_AttackMap; @@ -130,7 +128,7 @@ bool NoteData::IsRowEmpty( int index ) const if( index < 0 || index >= GetNumRows() ) return true; - for( int t=0; t& addTo ) const { - for( int t=0; t= GetNumRows() ) return 0; - for( int t=0; t= GetNumRows() ) return -1; - for( int t=0; t= GetNumRows() ) return -1; - for( int t=0; t setUsedIndices; int num_rows = GetNumRows(); - for( int t=0; t= %i (to %i)", - iOriginalTrack, Original.m_iNumTracks, iOriginalTrackToTakeFrom[t])); + ASSERT_M( iOriginalTrack < Original.GetNumTracks(), ssprintf("from %i >= %i (to %i)", + iOriginalTrack, Original.GetNumTracks(), iOriginalTrackToTakeFrom[t])); if( iOriginalTrack == -1 ) continue; @@ -765,7 +763,7 @@ void NoteData::PadTapNotes(int rows) needed += 100; /* optimization: give it a little more than it needs */ - for(int track = 0; track < m_iNumTracks; ++track) + for(int track = 0; track < GetNumTracks(); ++track) m_TapNotes[track].insert( m_TapNotes[track].end(), needed, TAP_EMPTY ); } @@ -778,6 +776,8 @@ void NoteData::MoveTapNoteTrack(int dest, int src) void NoteData::SetTapNote(int track, int row, TapNote t) { + DEBUG_ASSERT( track>=0 && track m_TapNotes[MAX_NOTE_TRACKS]; - int m_iNumTracks; + /* By convention, all TrackVectors have the same size. + * If you want to set the size of one, be sure to set the rest. */ + typedef vector TrackVector; + vector m_TapNotes; vector m_HoldNotes; diff --git a/stepmania/src/NoteTypes.h b/stepmania/src/NoteTypes.h index 587c4988a7..613f846c41 100644 --- a/stepmania/src/NoteTypes.h +++ b/stepmania/src/NoteTypes.h @@ -52,29 +52,7 @@ extern TapNote TAP_ADDITION_TAP; extern TapNote TAP_ADDITION_MINE; // TODO: Don't have a hard-coded track limit. -enum -{ - TRACK_1 = 0, - TRACK_2, - TRACK_3, - TRACK_4, - TRACK_5, - TRACK_6, - TRACK_7, - TRACK_8, - TRACK_9, - TRACK_10, - TRACK_11, - TRACK_12, - TRACK_13, // BMS reader needs 13 tracks - // MD 10/26/03 - BMS reader needs a whole lot more than 13 tracks - more like 16 - // because we have 11-16, 18, 19, 21-26, 28, 29 for IIDX double (bm-double7) - TRACK_14, - TRACK_15, - TRACK_16, - // MD 10/26/03 end - MAX_NOTE_TRACKS // leave this at the end -}; +const int MAX_NOTE_TRACKS = 16; const int BEATS_PER_MEASURE = 4; const int ROWS_PER_BEAT = 48; // It is important that this number is evenly divisible by 2, 3, and 4.