Make m_TapNotes a vector. (Hmm. Not ideal, but better.) Still not
completely abstracted (NotesLoaderBMS).
This commit is contained in:
+19
-11
@@ -24,13 +24,11 @@
|
|||||||
|
|
||||||
NoteData::NoteData()
|
NoteData::NoteData()
|
||||||
{
|
{
|
||||||
memset(m_TapNotes, 0, sizeof(m_TapNotes));
|
|
||||||
Init();
|
Init();
|
||||||
}
|
}
|
||||||
|
|
||||||
NoteData::NoteData(const NoteData &cpy)
|
NoteData::NoteData(const NoteData &cpy)
|
||||||
{
|
{
|
||||||
memset(m_TapNotes, 0, sizeof(m_TapNotes));
|
|
||||||
*this = cpy;
|
*this = cpy;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -38,7 +36,7 @@ NoteData &NoteData::operator= (const NoteData &cpy)
|
|||||||
{
|
{
|
||||||
Init();
|
Init();
|
||||||
for(int t = 0; t < MAX_NOTE_TRACKS; ++t)
|
for(int t = 0; t < MAX_NOTE_TRACKS; ++t)
|
||||||
memmove( m_TapNotes[t], cpy.m_TapNotes[t], sizeof(TapNote) * MAX_TAP_NOTE_ROWS );
|
m_TapNotes[t] = cpy.m_TapNotes[t];
|
||||||
memmove(m_HoldNotes, cpy.m_HoldNotes, sizeof(m_HoldNotes));
|
memmove(m_HoldNotes, cpy.m_HoldNotes, sizeof(m_HoldNotes));
|
||||||
|
|
||||||
m_iNumTracks = cpy.m_iNumTracks;
|
m_iNumTracks = cpy.m_iNumTracks;
|
||||||
@@ -48,19 +46,12 @@ NoteData &NoteData::operator= (const NoteData &cpy)
|
|||||||
|
|
||||||
void NoteData::Init()
|
void NoteData::Init()
|
||||||
{
|
{
|
||||||
for(int t = 0; t < MAX_NOTE_TRACKS; ++t) {
|
|
||||||
if(!m_TapNotes[t])
|
|
||||||
m_TapNotes[t] = new TapNote[MAX_TAP_NOTE_ROWS];
|
|
||||||
memset( m_TapNotes[t], TAP_EMPTY, sizeof(TapNote) * MAX_TAP_NOTE_ROWS );
|
|
||||||
}
|
|
||||||
m_iNumTracks = 0;
|
m_iNumTracks = 0;
|
||||||
m_iNumHoldNotes = 0;
|
m_iNumHoldNotes = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
NoteData::~NoteData()
|
NoteData::~NoteData()
|
||||||
{
|
{
|
||||||
for(int t = 0; t < MAX_NOTE_TRACKS; ++t)
|
|
||||||
delete[] m_TapNotes[t];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void NoteData::LoadFromSMNoteDataString( CString sSMNoteData )
|
void NoteData::LoadFromSMNoteDataString( CString sSMNoteData )
|
||||||
@@ -168,6 +159,7 @@ CString NoteData::GetSMNoteDataString()
|
|||||||
void NoteData::ClearRange( int iNoteIndexBegin, int iNoteIndexEnd )
|
void NoteData::ClearRange( int iNoteIndexBegin, int iNoteIndexEnd )
|
||||||
{
|
{
|
||||||
this->ConvertHoldNotesTo4s();
|
this->ConvertHoldNotesTo4s();
|
||||||
|
/* XXX: if iNoteIndexEnd == m_TapNotes[0].size(), just erase() */
|
||||||
for( int c=0; c<m_iNumTracks; c++ )
|
for( int c=0; c<m_iNumTracks; c++ )
|
||||||
{
|
{
|
||||||
for( int i=iNoteIndexBegin; i <= iNoteIndexEnd && i < MAX_TAP_NOTE_ROWS; i++ )
|
for( int i=iNoteIndexBegin; i <= iNoteIndexEnd && i < MAX_TAP_NOTE_ROWS; i++ )
|
||||||
@@ -907,7 +899,7 @@ void NoteData::LoadTransformed( NoteData* pOriginal, int iNewNumTracks, const in
|
|||||||
ASSERT( iOriginalTrack < pOriginal->m_iNumTracks );
|
ASSERT( iOriginalTrack < pOriginal->m_iNumTracks );
|
||||||
if( iOriginalTrack == -1 )
|
if( iOriginalTrack == -1 )
|
||||||
continue;
|
continue;
|
||||||
memcpy( m_TapNotes[t], pOriginal->m_TapNotes[iOriginalTrack], MAX_TAP_NOTE_ROWS*sizeof(TapNote) );
|
m_TapNotes[t] = pOriginal->m_TapNotes[iOriginalTrack];
|
||||||
}
|
}
|
||||||
|
|
||||||
pOriginal->Convert4sToHoldNotes();
|
pOriginal->Convert4sToHoldNotes();
|
||||||
@@ -1023,3 +1015,19 @@ NoteType NoteData::GetSmallestNoteTypeForMeasure( int iMeasureIndex )
|
|||||||
else
|
else
|
||||||
return nt;
|
return nt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void NoteData::PadTapNotes(int rows)
|
||||||
|
{
|
||||||
|
int needed = rows - m_TapNotes[0].size();
|
||||||
|
if(needed < 0) return;
|
||||||
|
vector<TapNote> pad(needed+1, TAP_EMPTY);
|
||||||
|
for(int track = 0; track < MAX_NOTE_TRACKS; ++track)
|
||||||
|
m_TapNotes[track].insert(m_TapNotes[track].end(), pad.begin(), pad.end());
|
||||||
|
}
|
||||||
|
|
||||||
|
void NoteData::SetTapNote(int track, int row, TapNote t)
|
||||||
|
{
|
||||||
|
if(row < 0) return;
|
||||||
|
PadTapNotes(row);
|
||||||
|
m_TapNotes[track][row]=t;
|
||||||
|
}
|
||||||
|
|||||||
@@ -32,21 +32,23 @@ public:
|
|||||||
NoteData &operator=(const NoteData &cpy);
|
NoteData &operator=(const NoteData &cpy);
|
||||||
|
|
||||||
int m_iNumTracks;
|
int m_iNumTracks;
|
||||||
TapNote *m_TapNotes[MAX_NOTE_TRACKS];
|
|
||||||
|
/* Keep this aligned, so that they all have the same size. */
|
||||||
|
vector<TapNote> m_TapNotes[MAX_NOTE_TRACKS];
|
||||||
HoldNote m_HoldNotes[MAX_HOLD_NOTES];
|
HoldNote m_HoldNotes[MAX_HOLD_NOTES];
|
||||||
int m_iNumHoldNotes;
|
int m_iNumHoldNotes;
|
||||||
|
|
||||||
TapNote GetTapNote(int track, int row) const
|
/* Return the note at the given track and row. Row may be out of
|
||||||
|
* range; pretend the song goes on with TAP_EMPTYs indefinitely. */
|
||||||
|
inline TapNote GetTapNote(unsigned track, unsigned row) const
|
||||||
{
|
{
|
||||||
if(row < 0 || row >= MAX_TAP_NOTE_ROWS) return TapNote('0');
|
if(row < 0 || row >= m_TapNotes[track].size()) return TapNote(TAP_EMPTY);
|
||||||
return m_TapNotes[track][row];
|
return m_TapNotes[track][row];
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetTapNote(int track, int row, TapNote t )
|
/* Pad m_TapNotes so it includes the row "rows". */
|
||||||
{
|
void PadTapNotes(int rows);
|
||||||
if(row < 0 || row >= MAX_TAP_NOTE_ROWS) return;
|
void SetTapNote(int track, int row, TapNote t);
|
||||||
m_TapNotes[track][row]=t;
|
|
||||||
}
|
|
||||||
|
|
||||||
void LoadFromSMNoteDataString( CString sSMNoteData );
|
void LoadFromSMNoteDataString( CString sSMNoteData );
|
||||||
CString GetSMNoteDataString();
|
CString GetSMNoteDataString();
|
||||||
|
|||||||
@@ -187,16 +187,10 @@ bool BMSLoader::LoadFromBMSFile( const CString &sPath, Notes &out )
|
|||||||
out.m_NotesType == NOTES_TYPE_DANCE_DOUBLE ||
|
out.m_NotesType == NOTES_TYPE_DANCE_DOUBLE ||
|
||||||
out.m_NotesType == NOTES_TYPE_DANCE_COUPLE) // if there are 4 panels, then the Up+Right track really contains the notes for Up
|
out.m_NotesType == NOTES_TYPE_DANCE_COUPLE) // if there are 4 panels, then the Up+Right track really contains the notes for Up
|
||||||
{
|
{
|
||||||
memcpy(
|
pNoteData->m_TapNotes[DANCE_NOTE_PAD1_UP] =
|
||||||
pNoteData->m_TapNotes[DANCE_NOTE_PAD1_UP],
|
pNoteData->m_TapNotes[DANCE_NOTE_PAD1_UPRIGHT];
|
||||||
pNoteData->m_TapNotes[DANCE_NOTE_PAD1_UPRIGHT],
|
for(unsigned i = 0; i < pNoteData->m_TapNotes[DANCE_NOTE_PAD1_UPRIGHT].size(); ++i)
|
||||||
MAX_TAP_NOTE_ROWS*sizeof(pNoteData->m_TapNotes[0][0])
|
pNoteData->SetTapNote(DANCE_NOTE_PAD1_UPRIGHT, i, TAP_EMPTY);
|
||||||
);
|
|
||||||
memset(
|
|
||||||
pNoteData->m_TapNotes[DANCE_NOTE_PAD2_UPRIGHT],
|
|
||||||
'0',
|
|
||||||
MAX_TAP_NOTE_ROWS*sizeof(pNoteData->m_TapNotes[0][0])
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// we're done reading in all of the BMS values
|
// we're done reading in all of the BMS values
|
||||||
|
|||||||
Reference in New Issue
Block a user