improve skippy
improve order of transforms when multiple are in effect
This commit is contained in:
@@ -777,9 +777,8 @@ void NoteDataUtil::Quick( NoteData &in, float fStartBeat, float fEndBeat )
|
|||||||
// this BMR-izer for your steps. Use with caution.
|
// this BMR-izer for your steps. Use with caution.
|
||||||
void NoteDataUtil::BMRize( NoteData &in, float fStartBeat, float fEndBeat )
|
void NoteDataUtil::BMRize( NoteData &in, float fStartBeat, float fEndBeat )
|
||||||
{
|
{
|
||||||
InsertIntelligentTaps(in,1.0f,0.5f,1.0f,false,fStartBeat,fEndBeat); // add 8ths between 4ths
|
Big( in, fStartBeat, fEndBeat );
|
||||||
InsertIntelligentTaps(in,0.5f,0.25f,0.5f,false,fStartBeat,fEndBeat); // then add 16ths between ALL 8ths
|
Quick( in, fStartBeat, fEndBeat );
|
||||||
// ...net result: OUCH. :-)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void NoteDataUtil::Skippy( NoteData &in, float fStartBeat, float fEndBeat )
|
void NoteDataUtil::Skippy( NoteData &in, float fStartBeat, float fEndBeat )
|
||||||
@@ -787,12 +786,22 @@ void NoteDataUtil::Skippy( NoteData &in, float fStartBeat, float fEndBeat )
|
|||||||
InsertIntelligentTaps(in,1.0f,0.75f,1.0f,true,fStartBeat,fEndBeat); // add 16ths between 4ths
|
InsertIntelligentTaps(in,1.0f,0.75f,1.0f,true,fStartBeat,fEndBeat); // add 16ths between 4ths
|
||||||
}
|
}
|
||||||
|
|
||||||
void NoteDataUtil::InsertIntelligentTaps( NoteData &in, float fWindowSizeBeats, float fInsertOffsetBeats, float fWindowStrideBeats, bool bSkippy, float fStartBeat, float fEndBeat )
|
void NoteDataUtil::InsertIntelligentTaps(
|
||||||
|
NoteData &in,
|
||||||
|
float fWindowSizeBeats,
|
||||||
|
float fInsertOffsetBeats,
|
||||||
|
float fWindowStrideBeats,
|
||||||
|
bool bSkippy,
|
||||||
|
float fStartBeat,
|
||||||
|
float fEndBeat )
|
||||||
{
|
{
|
||||||
ASSERT( fInsertOffsetBeats <= fWindowSizeBeats );
|
ASSERT( fInsertOffsetBeats <= fWindowSizeBeats );
|
||||||
ASSERT( fWindowSizeBeats <= fWindowStrideBeats );
|
ASSERT( fWindowSizeBeats <= fWindowStrideBeats );
|
||||||
in.ConvertHoldNotesTo4s();
|
in.ConvertHoldNotesTo4s();
|
||||||
|
|
||||||
|
bool bRequireNoteAtBeginningOfWindow = !bSkippy;
|
||||||
|
bool bRequireNoteAtEndOfWindow = true;
|
||||||
|
|
||||||
/* Start on a multiple of fBeatInterval. */
|
/* Start on a multiple of fBeatInterval. */
|
||||||
fStartBeat = froundf( fStartBeat, fWindowStrideBeats );
|
fStartBeat = froundf( fStartBeat, fWindowStrideBeats );
|
||||||
|
|
||||||
@@ -812,8 +821,10 @@ void NoteDataUtil::InsertIntelligentTaps( NoteData &in, float fWindowSizeBeats,
|
|||||||
// following two lines have been changed because the behavior of treating hold-heads
|
// following two lines have been changed because the behavior of treating hold-heads
|
||||||
// as different from taps doesn't feel right, and because we need to check
|
// as different from taps doesn't feel right, and because we need to check
|
||||||
// against TAP_ADDITION with the BMRize mod.
|
// against TAP_ADDITION with the BMRize mod.
|
||||||
|
if( bRequireNoteAtBeginningOfWindow )
|
||||||
if( in.GetNumTapNonEmptyTracks(iRowEarlier)!=1 || in.GetNumTracksWithTapOrHoldHead(iRowEarlier)!=1 )
|
if( in.GetNumTapNonEmptyTracks(iRowEarlier)!=1 || in.GetNumTracksWithTapOrHoldHead(iRowEarlier)!=1 )
|
||||||
continue;
|
continue;
|
||||||
|
if( bRequireNoteAtEndOfWindow )
|
||||||
if( in.GetNumTapNonEmptyTracks(iRowLater)!=1 || in.GetNumTracksWithTapOrHoldHead(iRowLater)!=1 )
|
if( in.GetNumTapNonEmptyTracks(iRowLater)!=1 || in.GetNumTracksWithTapOrHoldHead(iRowLater)!=1 )
|
||||||
continue;
|
continue;
|
||||||
// there is a 4th and 8th note surrounding iRowBetween
|
// there is a 4th and 8th note surrounding iRowBetween
|
||||||
@@ -835,10 +846,13 @@ void NoteDataUtil::InsertIntelligentTaps( NoteData &in, float fWindowSizeBeats,
|
|||||||
int iTrackOfNoteToAdd = 0;
|
int iTrackOfNoteToAdd = 0;
|
||||||
if( bSkippy &&
|
if( bSkippy &&
|
||||||
iTrackOfNoteEarlier != iTrackOfNoteLater ) // Don't make skips on the same note
|
iTrackOfNoteEarlier != iTrackOfNoteLater ) // Don't make skips on the same note
|
||||||
|
{
|
||||||
|
if( iTrackOfNoteEarlier != -1 )
|
||||||
{
|
{
|
||||||
iTrackOfNoteToAdd = iTrackOfNoteEarlier;
|
iTrackOfNoteToAdd = iTrackOfNoteEarlier;
|
||||||
goto done_looking_for_track_to_add;
|
goto done_looking_for_track_to_add;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// try to choose a track between the earlier and later notes
|
// try to choose a track between the earlier and later notes
|
||||||
if( abs(iTrackOfNoteEarlier-iTrackOfNoteLater) >= 2 )
|
if( abs(iTrackOfNoteEarlier-iTrackOfNoteLater) >= 2 )
|
||||||
@@ -847,12 +861,14 @@ void NoteDataUtil::InsertIntelligentTaps( NoteData &in, float fWindowSizeBeats,
|
|||||||
goto done_looking_for_track_to_add;
|
goto done_looking_for_track_to_add;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// try to choose a track just to the left
|
||||||
if( min(iTrackOfNoteEarlier,iTrackOfNoteLater)-1 >= 0 )
|
if( min(iTrackOfNoteEarlier,iTrackOfNoteLater)-1 >= 0 )
|
||||||
{
|
{
|
||||||
iTrackOfNoteToAdd = min(iTrackOfNoteEarlier,iTrackOfNoteLater)-1;
|
iTrackOfNoteToAdd = min(iTrackOfNoteEarlier,iTrackOfNoteLater)-1;
|
||||||
goto done_looking_for_track_to_add;
|
goto done_looking_for_track_to_add;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// try to choose a track just to the right
|
||||||
if( max(iTrackOfNoteEarlier,iTrackOfNoteLater)+1 < in.GetNumTracks() )
|
if( max(iTrackOfNoteEarlier,iTrackOfNoteLater)+1 < in.GetNumTracks() )
|
||||||
{
|
{
|
||||||
iTrackOfNoteToAdd = max(iTrackOfNoteEarlier,iTrackOfNoteLater)+1;
|
iTrackOfNoteToAdd = max(iTrackOfNoteEarlier,iTrackOfNoteLater)+1;
|
||||||
@@ -1375,20 +1391,35 @@ void NoteDataUtil::TransformNoteData( NoteData &nd, const PlayerOptions &po, Ste
|
|||||||
if( po.m_bTurns[PlayerOptions::TURN_SHUFFLE] ) NoteDataUtil::Turn( nd, st, NoteDataUtil::shuffle, fStartBeat, fEndBeat );
|
if( po.m_bTurns[PlayerOptions::TURN_SHUFFLE] ) NoteDataUtil::Turn( nd, st, NoteDataUtil::shuffle, fStartBeat, fEndBeat );
|
||||||
if( po.m_bTurns[PlayerOptions::TURN_SUPER_SHUFFLE] ) NoteDataUtil::Turn( nd, st, NoteDataUtil::super_shuffle, fStartBeat, fEndBeat );
|
if( po.m_bTurns[PlayerOptions::TURN_SUPER_SHUFFLE] ) NoteDataUtil::Turn( nd, st, NoteDataUtil::super_shuffle, fStartBeat, fEndBeat );
|
||||||
|
|
||||||
// apply little before others
|
// apply removing transforms before others
|
||||||
if( po.m_bTransforms[PlayerOptions::TRANSFORM_LITTLE] ) NoteDataUtil::Little(nd, fStartBeat, fEndBeat);
|
if( po.m_bTransforms[PlayerOptions::TRANSFORM_LITTLE] ) NoteDataUtil::Little(nd, fStartBeat, fEndBeat);
|
||||||
if( po.m_bTransforms[PlayerOptions::TRANSFORM_NOHOLDS] ) NoteDataUtil::RemoveHoldNotes(nd, fStartBeat, fEndBeat);
|
if( po.m_bTransforms[PlayerOptions::TRANSFORM_NOHOLDS] ) NoteDataUtil::RemoveHoldNotes(nd, fStartBeat, fEndBeat);
|
||||||
if( po.m_bTransforms[PlayerOptions::TRANSFORM_NOMINES] ) NoteDataUtil::RemoveMines(nd, fStartBeat, fEndBeat);
|
if( po.m_bTransforms[PlayerOptions::TRANSFORM_NOMINES] ) NoteDataUtil::RemoveMines(nd, fStartBeat, fEndBeat);
|
||||||
if( po.m_bTransforms[PlayerOptions::TRANSFORM_WIDE] ) NoteDataUtil::Wide(nd, fStartBeat, fEndBeat);
|
|
||||||
|
// AddIntelligentTap transforms need small gaps space between
|
||||||
|
// notes to have an effect. Run them first.
|
||||||
if( po.m_bTransforms[PlayerOptions::TRANSFORM_BIG] ) NoteDataUtil::Big(nd, fStartBeat, fEndBeat);
|
if( po.m_bTransforms[PlayerOptions::TRANSFORM_BIG] ) NoteDataUtil::Big(nd, fStartBeat, fEndBeat);
|
||||||
if( po.m_bTransforms[PlayerOptions::TRANSFORM_QUICK] ) NoteDataUtil::Quick(nd, fStartBeat, fEndBeat);
|
if( po.m_bTransforms[PlayerOptions::TRANSFORM_QUICK] ) NoteDataUtil::Quick(nd, fStartBeat, fEndBeat);
|
||||||
if( po.m_bTransforms[PlayerOptions::TRANSFORM_BMRIZE] ) NoteDataUtil::BMRize(nd, fStartBeat, fEndBeat);
|
if( po.m_bTransforms[PlayerOptions::TRANSFORM_BMRIZE] ) NoteDataUtil::BMRize(nd, fStartBeat, fEndBeat);
|
||||||
|
|
||||||
|
// Skippy will still add taps to places that the other
|
||||||
|
// AddIntelligentTaps above won't.
|
||||||
if( po.m_bTransforms[PlayerOptions::TRANSFORM_SKIPPY] ) NoteDataUtil::Skippy(nd, fStartBeat, fEndBeat);
|
if( po.m_bTransforms[PlayerOptions::TRANSFORM_SKIPPY] ) NoteDataUtil::Skippy(nd, fStartBeat, fEndBeat);
|
||||||
|
|
||||||
|
// These don't need any particular sized gaps between notes
|
||||||
if( po.m_bTransforms[PlayerOptions::TRANSFORM_MINES] ) NoteDataUtil::AddMines(nd, fStartBeat, fEndBeat);
|
if( po.m_bTransforms[PlayerOptions::TRANSFORM_MINES] ) NoteDataUtil::AddMines(nd, fStartBeat, fEndBeat);
|
||||||
if( po.m_bTransforms[PlayerOptions::TRANSFORM_ECHO] ) NoteDataUtil::Echo(nd, fStartBeat, fEndBeat);
|
if( po.m_bTransforms[PlayerOptions::TRANSFORM_ECHO] ) NoteDataUtil::Echo(nd, fStartBeat, fEndBeat);
|
||||||
if( po.m_bTransforms[PlayerOptions::TRANSFORM_PLANTED] ) NoteDataUtil::Planted(nd, fStartBeat, fEndBeat);
|
|
||||||
|
// Jump-adding transforms aren't much affected by additional taps
|
||||||
|
if( po.m_bTransforms[PlayerOptions::TRANSFORM_WIDE] ) NoteDataUtil::Wide(nd, fStartBeat, fEndBeat);
|
||||||
if( po.m_bTransforms[PlayerOptions::TRANSFORM_STOMP] ) NoteDataUtil::Stomp(nd, st, fStartBeat, fEndBeat);
|
if( po.m_bTransforms[PlayerOptions::TRANSFORM_STOMP] ) NoteDataUtil::Stomp(nd, st, fStartBeat, fEndBeat);
|
||||||
|
|
||||||
|
// Transforms that add holds go last. If they went first, most tap-adding
|
||||||
|
// transforms wouldn't do anything because tap-adding transforms skip areas where
|
||||||
|
// there's a hold.
|
||||||
|
if( po.m_bTransforms[PlayerOptions::TRANSFORM_PLANTED] ) NoteDataUtil::Planted(nd, fStartBeat, fEndBeat);
|
||||||
if( po.m_bTransforms[PlayerOptions::TRANSFORM_TWISTER] ) NoteDataUtil::Twister(nd, fStartBeat, fEndBeat);
|
if( po.m_bTransforms[PlayerOptions::TRANSFORM_TWISTER] ) NoteDataUtil::Twister(nd, fStartBeat, fEndBeat);
|
||||||
|
|
||||||
if( po.m_bTransforms[PlayerOptions::TRANSFORM_NOJUMPS] ) NoteDataUtil::RemoveJumps(nd, fStartBeat, fEndBeat);
|
if( po.m_bTransforms[PlayerOptions::TRANSFORM_NOJUMPS] ) NoteDataUtil::RemoveJumps(nd, fStartBeat, fEndBeat);
|
||||||
if( po.m_bTransforms[PlayerOptions::TRANSFORM_NOHANDS] ) NoteDataUtil::RemoveHands(nd, fStartBeat, fEndBeat);
|
if( po.m_bTransforms[PlayerOptions::TRANSFORM_NOHANDS] ) NoteDataUtil::RemoveHands(nd, fStartBeat, fEndBeat);
|
||||||
if( po.m_bTransforms[PlayerOptions::TRANSFORM_NOQUADS] ) NoteDataUtil::RemoveQuads(nd, fStartBeat, fEndBeat);
|
if( po.m_bTransforms[PlayerOptions::TRANSFORM_NOQUADS] ) NoteDataUtil::RemoveQuads(nd, fStartBeat, fEndBeat);
|
||||||
|
|||||||
@@ -53,7 +53,14 @@ namespace NoteDataUtil
|
|||||||
void Quick( NoteData &in, float fStartBeat = 0, float fEndBeat = 99999 );
|
void Quick( NoteData &in, float fStartBeat = 0, float fEndBeat = 99999 );
|
||||||
void BMRize( NoteData &in, float fStartBeat = 0, float fEndBeat = 99999 );
|
void BMRize( NoteData &in, float fStartBeat = 0, float fEndBeat = 99999 );
|
||||||
void Skippy( NoteData &in, float fStartBeat = 0, float fEndBeat = 99999 );
|
void Skippy( NoteData &in, float fStartBeat = 0, float fEndBeat = 99999 );
|
||||||
void InsertIntelligentTaps( NoteData &in, float fWindowSizeBeats, float fInsertOffsetBeats, float fWindowStrideBeats, bool bSkippy, float fStartBeat = 0, float fEndBeat = 99999 );
|
void InsertIntelligentTaps(
|
||||||
|
NoteData &in,
|
||||||
|
float fWindowSizeBeats,
|
||||||
|
float fInsertOffsetBeats,
|
||||||
|
float fWindowStrideBeats,
|
||||||
|
bool bSkippy,
|
||||||
|
float fStartBeat = 0,
|
||||||
|
float fEndBeat = 99999 );
|
||||||
void AddMines( NoteData &in, float fStartBeat = 0, float fEndBeat = 99999 );
|
void AddMines( NoteData &in, float fStartBeat = 0, float fEndBeat = 99999 );
|
||||||
void Echo( NoteData &in, float fStartBeat = 0, float fEndBeat = 99999 );
|
void Echo( NoteData &in, float fStartBeat = 0, float fEndBeat = 99999 );
|
||||||
void Planted( NoteData &in, float fStartBeat = 0, float fEndBeat = 99999 );
|
void Planted( NoteData &in, float fStartBeat = 0, float fEndBeat = 99999 );
|
||||||
|
|||||||
Reference in New Issue
Block a user