It's hard to maintain this information when using begin() and end() so rather than wrapping the iterators, just check each time IsComposite() is called since it doesn't happen _that_ often. Just don't call IsComposite() often.
This commit is contained in:
@@ -21,7 +21,6 @@ NoteData::NoteData()
|
||||
|
||||
void NoteData::Init()
|
||||
{
|
||||
m_bComposite = false;
|
||||
ClearAll();
|
||||
m_TapNotes = vector<TrackMap>(); // ensure that the memory is freed
|
||||
}
|
||||
@@ -37,6 +36,16 @@ void NoteData::SetNumTracks( int iNewNumTracks )
|
||||
m_TapNotes.resize( iNewNumTracks );
|
||||
}
|
||||
|
||||
bool NoteData::IsComposite() const
|
||||
{
|
||||
for( int track = 0; track < GetNumTracks(); ++track )
|
||||
{
|
||||
FOREACHM_CONST( int, TapNote, m_TapNotes[track], tn )
|
||||
if( tn->second.pn != PLAYER_INVALID )
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Clear [rowBegin,rowEnd). */
|
||||
void NoteData::ClearRangeForTrack( int rowBegin, int rowEnd, int iTrack )
|
||||
|
||||
@@ -30,8 +30,6 @@ private:
|
||||
// There's no point in inserting empty notes into the map.
|
||||
// Any blank space in the map is defined to be empty.
|
||||
vector<TrackMap> m_TapNotes;
|
||||
// This NoteData comprises multiple NoteDatas.
|
||||
bool m_bComposite;
|
||||
|
||||
public:
|
||||
NoteData();
|
||||
@@ -40,8 +38,7 @@ public:
|
||||
|
||||
int GetNumTracks() const { return m_TapNotes.size(); }
|
||||
void SetNumTracks( int iNewNumTracks );
|
||||
bool IsComposite() const { return m_bComposite; }
|
||||
void SetComposite( bool b ) { m_bComposite = b; }
|
||||
bool IsComposite() 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. */
|
||||
|
||||
@@ -239,7 +239,7 @@ static void LoadFromSMNoteDataStringWithPlayer( NoteData& out, const RString &sS
|
||||
|
||||
}
|
||||
|
||||
void NoteDataUtil::LoadFromSMNoteDataString( NoteData &out, const RString &sSMNoteData_ )
|
||||
void NoteDataUtil::LoadFromSMNoteDataString( NoteData &out, const RString &sSMNoteData_, bool bComposite )
|
||||
{
|
||||
//
|
||||
// Load note data
|
||||
@@ -263,10 +263,8 @@ void NoteDataUtil::LoadFromSMNoteDataString( NoteData &out, const RString &sSMNo
|
||||
|
||||
/* Clear notes, but keep the same number of tracks. */
|
||||
int iNumTracks = out.GetNumTracks();
|
||||
bool bComposite = out.IsComposite();
|
||||
out.Init();
|
||||
out.SetNumTracks( iNumTracks );
|
||||
out.SetComposite( bComposite );
|
||||
|
||||
if( !bComposite )
|
||||
{
|
||||
|
||||
@@ -17,7 +17,7 @@ struct RadarValues;
|
||||
namespace NoteDataUtil
|
||||
{
|
||||
NoteType GetSmallestNoteTypeForMeasure( const NoteData &n, int iMeasureIndex );
|
||||
void LoadFromSMNoteDataString( NoteData &out, const RString &sSMNoteData );
|
||||
void LoadFromSMNoteDataString( NoteData &out, const RString &sSMNoteData, bool bComposite );
|
||||
void GetSMNoteDataString( const NoteData &in, RString ¬es_out );
|
||||
void SplitCompositeNoteData( const NoteData &in, vector<NoteData> &out );
|
||||
void LoadTransformedSlidingWindow( const NoteData &in, NoteData &out, int iNewNumTracks );
|
||||
|
||||
@@ -225,11 +225,11 @@ void Steps::Decompress() const
|
||||
else
|
||||
{
|
||||
// load from compressed
|
||||
bool bComposite = m_StepsType == STEPS_TYPE_DANCE_ROUTINE;
|
||||
m_bNoteDataIsFilled = true;
|
||||
m_pNoteData->SetNumTracks( GameManager::StepsTypeToNumTracks(m_StepsType) );
|
||||
m_pNoteData->SetComposite( m_StepsType == STEPS_TYPE_DANCE_ROUTINE );
|
||||
|
||||
NoteDataUtil::LoadFromSMNoteDataString( *m_pNoteData, m_sNoteDataCompressed );
|
||||
NoteDataUtil::LoadFromSMNoteDataString( *m_pNoteData, m_sNoteDataCompressed, bComposite );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user