fix FixImpossibleRows()

fix misaligned editor NoteFields
This commit is contained in:
Chris Danford
2003-09-21 23:16:44 +00:00
parent 1b0abc39cf
commit 9434a66d94
7 changed files with 104 additions and 61 deletions
+33 -15
View File
@@ -916,35 +916,53 @@ const ValidRow g_ValidRows[] =
void NoteDataUtil::FixImpossibleRows( NoteData &in, StepsType st )
{
for( unsigned i=0; i<ARRAYSIZE(g_ValidRows); i++ )
vector<const ValidRow*> vpValidRowsToCheck;
for( int i=0; i<ARRAYSIZE(g_ValidRows); i++ )
{
const ValidRow vr = g_ValidRows[i];
if( vr.st != st )
continue; // skip
if( g_ValidRows[i].st == st )
vpValidRowsToCheck.push_back( &g_ValidRows[i] );
}
for( int r=0; r<=in.GetLastRow(); r++ )
if( !NoteDataUtil::RowPassesValidMask(in,r,vr.bValidMask) ) // failed mask
NoteDataUtil::EliminateNonPassingTaps(in,r,vr.bValidMask);
// bail early if there's nothing to validate against
if( vpValidRowsToCheck.empty() )
return;
// each row must pass at least one valid mask
for( int r=0; r<=in.GetLastRow(); r++ )
{
// only check rows with jumps
if( in.GetNumTapNonEmptyTracks(r) < 2 )
continue;
bool bPassedOneMask = false;
for( unsigned i=0; i<vpValidRowsToCheck.size(); i++ )
{
const ValidRow &vr = *vpValidRowsToCheck[i];
if( NoteDataUtil::RowPassesValidMask(in,r,vr.bValidMask) )
{
bPassedOneMask = true;
break;
}
else
int skjdksjd = 0;
}
if( !bPassedOneMask )
in.EliminateAllButOneTap(r);
}
}
bool NoteDataUtil::RowPassesValidMask( NoteData &in, int row, const bool bValidMask[] )
{
for( int t=0; t<in.GetNumTracks(); t++ )
{
if( !bValidMask[t] && in.GetTapNote(t,row) != TAP_EMPTY )
return false;
}
return true;
}
void NoteDataUtil::EliminateNonPassingTaps( NoteData &in, int row, const bool bValidMask[] )
{
for( int t=0; t<in.GetNumTracks(); t++ )
if( !bValidMask[t] && in.GetTapNote(t,row) != TAP_EMPTY )
in.SetTapNote(t,row,TAP_EMPTY);
}
void NoteDataUtil::ConvertAdditionsToRegular( NoteData &in )
{
for( int r=0; r<=in.GetLastRow(); r++ )