Add NoteData::LoadOverlapped. Simplify.
This commit is contained in:
@@ -464,11 +464,49 @@ void NoteData::LoadTransformed( const NoteData* pOriginal, int iNewNumTracks, co
|
|||||||
Convert4sToHoldNotes();
|
Convert4sToHoldNotes();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void NoteData::LoadOverlapped( const NoteData* pOriginal, int iNewNumTracks )
|
||||||
|
{
|
||||||
|
SetNumTracks( pOriginal->GetNumTracks() );
|
||||||
|
CopyRange( pOriginal, 0, pOriginal->GetLastRow(), 0 );
|
||||||
|
|
||||||
|
const int iOriginalTracks = pOriginal->GetNumTracks();
|
||||||
|
const bool iUnevenTracks = (iOriginalTracks % iNewNumTracks) != 0;
|
||||||
|
const int iTracksToOverlap = iOriginalTracks / iNewNumTracks;
|
||||||
|
if( iTracksToOverlap )
|
||||||
|
{
|
||||||
|
// if we have at least as many tracks in the old mode
|
||||||
|
// as we do in the mode we're going to
|
||||||
|
for (int ix = 0; ix < iNewNumTracks; ix++)
|
||||||
|
{
|
||||||
|
for (int iy = 0; iy < iTracksToOverlap; iy++)
|
||||||
|
{
|
||||||
|
CombineTracks(ix, (ix + iy * iNewNumTracks));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if( iUnevenTracks )
|
||||||
|
{
|
||||||
|
for (int ix = iOriginalTracks - iUnevenTracks; ix < iOriginalTracks; ix++)
|
||||||
|
{
|
||||||
|
// spread out the remaining tracks evenly
|
||||||
|
CombineTracks((ix * iOriginalTracks) % iNewNumTracks, ix);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
SetNumTracks( iNewNumTracks );
|
||||||
|
}
|
||||||
|
|
||||||
void NoteData::LoadTransformedSlidingWindow( const NoteData* pOriginal, int iNewNumTracks )
|
void NoteData::LoadTransformedSlidingWindow( const NoteData* pOriginal, int iNewNumTracks )
|
||||||
{
|
{
|
||||||
// reset all notes
|
// reset all notes
|
||||||
Init();
|
Init();
|
||||||
|
|
||||||
|
if( pOriginal->GetNumTracks() > iNewNumTracks )
|
||||||
|
{
|
||||||
|
/* Use a ifferent algorithm for reducing tracks. */
|
||||||
|
LoadOverlapped( pOriginal, iNewNumTracks );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
NoteData Original;
|
NoteData Original;
|
||||||
Original.To4s( *pOriginal );
|
Original.To4s( *pOriginal );
|
||||||
|
|
||||||
|
|||||||
@@ -33,6 +33,8 @@ class NoteData
|
|||||||
/* Pad m_TapNotes so it includes the row "rows". */
|
/* Pad m_TapNotes so it includes the row "rows". */
|
||||||
void PadTapNotes(int rows);
|
void PadTapNotes(int rows);
|
||||||
|
|
||||||
|
void LoadOverlapped( const NoteData* pOriginal, int iNewNumTracks );
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/* Set up to hold the data in From; same number of tracks, same
|
/* Set up to hold the data in From; same number of tracks, same
|
||||||
* divisor. Doesn't allocate or copy anything. */
|
* divisor. Doesn't allocate or copy anything. */
|
||||||
|
|||||||
+1
-31
@@ -162,37 +162,7 @@ void Steps::Decompress() const
|
|||||||
|
|
||||||
int iNewTracks = GameManager::NotesTypeToNumTracks(m_StepsType);
|
int iNewTracks = GameManager::NotesTypeToNumTracks(m_StepsType);
|
||||||
|
|
||||||
if( pdata.GetNumTracks() > iNewTracks)
|
notes->LoadTransformedSlidingWindow( &pdata, iNewTracks );
|
||||||
{
|
|
||||||
notes->SetNumTracks( pdata.GetNumTracks() );
|
|
||||||
notes->CopyRange( &pdata, 0, pdata.GetLastRow(), 0 );
|
|
||||||
|
|
||||||
const int iOriginalTracks = pdata.GetNumTracks();
|
|
||||||
const bool iUnevenTracks = (iOriginalTracks % iNewTracks) != 0;
|
|
||||||
const int iTracksToOverlap = iOriginalTracks / iNewTracks;
|
|
||||||
if( iTracksToOverlap )
|
|
||||||
{
|
|
||||||
// if we have at least as many tracks in the old mode
|
|
||||||
// as we do in the mode we're going to
|
|
||||||
for (int ix = 0; ix < iNewTracks; ix++)
|
|
||||||
{
|
|
||||||
for (int iy = 0; iy < iTracksToOverlap; iy++)
|
|
||||||
{
|
|
||||||
notes->CombineTracks(ix, (ix + iy * iNewTracks));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if( iUnevenTracks )
|
|
||||||
{
|
|
||||||
for (int ix = iOriginalTracks - iUnevenTracks; ix < iOriginalTracks; ix++)
|
|
||||||
{
|
|
||||||
// spread out the remaining tracks evenly
|
|
||||||
notes->CombineTracks((ix * iOriginalTracks) % iNewTracks, ix);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
notes->SetNumTracks( iNewTracks );
|
|
||||||
} else
|
|
||||||
notes->LoadTransformedSlidingWindow( &pdata, iNewTracks );
|
|
||||||
|
|
||||||
NoteDataUtil::FixImpossibleRows( *notes, m_StepsType );
|
NoteDataUtil::FixImpossibleRows( *notes, m_StepsType );
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user