show different tap graphic for additional notes created by a transform
This commit is contained in:
@@ -1,12 +1,14 @@
|
|||||||
[NoteDisplay]
|
[NoteDisplay]
|
||||||
DrawHoldHeadForTapsOnSameRow=1
|
DrawHoldHeadForTapsOnSameRow=1
|
||||||
TapNoteAnimationLengthInBeats=4
|
TapNoteAnimationLengthInBeats=4
|
||||||
|
TapAdditionAnimationLengthInBeats=4
|
||||||
HoldHeadAnimationLengthInBeats=4 // doesn't matter. Only 1 frame anyway.
|
HoldHeadAnimationLengthInBeats=4 // doesn't matter. Only 1 frame anyway.
|
||||||
HoldTopCapAnimationLengthInBeats=4 // doesn't matter. Only 1 frame anyway.
|
HoldTopCapAnimationLengthInBeats=4 // doesn't matter. Only 1 frame anyway.
|
||||||
HoldBottomCapAnimationLengthInBeats=4 // doesn't matter. Only 1 frame anyway.
|
HoldBottomCapAnimationLengthInBeats=4 // doesn't matter. Only 1 frame anyway.
|
||||||
HoldBodyAnimationLengthInBeats=4 // doesn't matter. Only 1 frame anyway.
|
HoldBodyAnimationLengthInBeats=4 // doesn't matter. Only 1 frame anyway.
|
||||||
HoldTailAnimationLengthInBeats=4 // doesn't matter. Only 1 frame anyway.
|
HoldTailAnimationLengthInBeats=4 // doesn't matter. Only 1 frame anyway.
|
||||||
TapNoteAnimationIsVivid=1
|
TapNoteAnimationIsVivid=1
|
||||||
|
TapAdditionAnimationIsVivid=1
|
||||||
HoldHeadAnimationIsVivid=0
|
HoldHeadAnimationIsVivid=0
|
||||||
HoldTopCapAnimationIsVivid=0
|
HoldTopCapAnimationIsVivid=0
|
||||||
HoldBodyAnimationIsVivid=0
|
HoldBodyAnimationIsVivid=0
|
||||||
|
|||||||
@@ -539,7 +539,7 @@ void NoteDataUtil::Wide( NoteData &in )
|
|||||||
{
|
{
|
||||||
iTrackToAdd = (iTrackToAdd+1) % in.GetNumTracks();
|
iTrackToAdd = (iTrackToAdd+1) % in.GetNumTracks();
|
||||||
}
|
}
|
||||||
in.SetTapNote(iTrackToAdd, i, TAP_TAP);
|
in.SetTapNote(iTrackToAdd, i, TAP_ADDITION);
|
||||||
}
|
}
|
||||||
|
|
||||||
in.Convert4sToHoldNotes();
|
in.Convert4sToHoldNotes();
|
||||||
@@ -618,7 +618,7 @@ void NoteDataUtil::InsertIntelligentTaps( NoteData &in, float fBeatInterval, flo
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
in.SetTapNote(iTrackOfNoteToAdd, iRowToAdd, TAP_TAP);
|
in.SetTapNote(iTrackOfNoteToAdd, iRowToAdd, TAP_ADDITION);
|
||||||
}
|
}
|
||||||
|
|
||||||
in.Convert4sToHoldNotes();
|
in.Convert4sToHoldNotes();
|
||||||
@@ -867,3 +867,12 @@ void NoteDataUtil::EliminateNonPassingTaps( NoteData &in, int row, const bool bV
|
|||||||
if( !bValidMask[t] && in.GetTapNote(t,row) != TAP_EMPTY )
|
if( !bValidMask[t] && in.GetTapNote(t,row) != TAP_EMPTY )
|
||||||
in.SetTapNote(t,row,TAP_EMPTY);
|
in.SetTapNote(t,row,TAP_EMPTY);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void NoteDataUtil::ConvertAdditionsToRegular( NoteData &in )
|
||||||
|
{
|
||||||
|
for( int r=0; r<=in.GetLastRow(); r++ )
|
||||||
|
for( int t=0; t<in.GetNumTracks(); t++ )
|
||||||
|
if( in.GetTapNote(t,r) == TAP_ADDITION )
|
||||||
|
in.SetTapNote(t,r,TAP_TAP);
|
||||||
|
}
|
||||||
|
|||||||
@@ -49,6 +49,9 @@ namespace NoteDataUtil
|
|||||||
void InsertIntelligentTaps( NoteData &in, float fBeatInterval, float fInsertBeatOffset, bool bNewTapSameAsBeginning );
|
void InsertIntelligentTaps( NoteData &in, float fBeatInterval, float fInsertBeatOffset, bool bNewTapSameAsBeginning );
|
||||||
void SuperShuffleTaps( NoteData &in );
|
void SuperShuffleTaps( NoteData &in );
|
||||||
|
|
||||||
|
// change all TAP_ADDITIONs to TAP_TAPs
|
||||||
|
void ConvertAdditionsToRegular( NoteData &in );
|
||||||
|
|
||||||
void Backwards( NoteData &in );
|
void Backwards( NoteData &in );
|
||||||
void SwapSides( NoteData &in );
|
void SwapSides( NoteData &in );
|
||||||
void CopyLeftToRight( NoteData &in );
|
void CopyLeftToRight( NoteData &in );
|
||||||
|
|||||||
@@ -45,12 +45,14 @@ Actor* MakeModelOrSprite( CString sFile )
|
|||||||
|
|
||||||
#define DRAW_HOLD_HEAD_FOR_TAPS_ON_SAME_ROW NOTESKIN->GetMetricB(pn,name,"DrawHoldHeadForTapsOnSameRow")
|
#define DRAW_HOLD_HEAD_FOR_TAPS_ON_SAME_ROW NOTESKIN->GetMetricB(pn,name,"DrawHoldHeadForTapsOnSameRow")
|
||||||
#define TAP_NOTE_ANIMATION_LENGTH_IN_BEATS NOTESKIN->GetMetricF(pn,name,"TapNoteAnimationLengthInBeats")
|
#define TAP_NOTE_ANIMATION_LENGTH_IN_BEATS NOTESKIN->GetMetricF(pn,name,"TapNoteAnimationLengthInBeats")
|
||||||
|
#define TAP_ADDITION_ANIMATION_LENGTH_IN_BEATS NOTESKIN->GetMetricF(pn,name,"TapAdditionAnimationLengthInBeats")
|
||||||
#define HOLD_HEAD_ANIMATION_LENGTH_IN_BEATS NOTESKIN->GetMetricF(pn,name,"HoldHeadAnimationLengthInBeats")
|
#define HOLD_HEAD_ANIMATION_LENGTH_IN_BEATS NOTESKIN->GetMetricF(pn,name,"HoldHeadAnimationLengthInBeats")
|
||||||
#define HOLD_TOPCAP_ANIMATION_LENGTH_IN_BEATS NOTESKIN->GetMetricF(pn,name,"HoldTopCapAnimationLengthInBeats")
|
#define HOLD_TOPCAP_ANIMATION_LENGTH_IN_BEATS NOTESKIN->GetMetricF(pn,name,"HoldTopCapAnimationLengthInBeats")
|
||||||
#define HOLD_BODY_ANIMATION_LENGTH_IN_BEATS NOTESKIN->GetMetricF(pn,name,"HoldBodyAnimationLengthInBeats")
|
#define HOLD_BODY_ANIMATION_LENGTH_IN_BEATS NOTESKIN->GetMetricF(pn,name,"HoldBodyAnimationLengthInBeats")
|
||||||
#define HOLD_BOTTOMCAP_ANIMATION_LENGTH_IN_BEATS NOTESKIN->GetMetricF(pn,name,"HoldBottomCapAnimationLengthInBeats")
|
#define HOLD_BOTTOMCAP_ANIMATION_LENGTH_IN_BEATS NOTESKIN->GetMetricF(pn,name,"HoldBottomCapAnimationLengthInBeats")
|
||||||
#define HOLD_TAIL_ANIMATION_LENGTH_IN_BEATS NOTESKIN->GetMetricF(pn,name,"HoldTailAnimationLengthInBeats")
|
#define HOLD_TAIL_ANIMATION_LENGTH_IN_BEATS NOTESKIN->GetMetricF(pn,name,"HoldTailAnimationLengthInBeats")
|
||||||
#define TAP_NOTE_ANIMATION_IS_VIVID NOTESKIN->GetMetricB(pn,name,"TapNoteAnimationIsVivid")
|
#define TAP_NOTE_ANIMATION_IS_VIVID NOTESKIN->GetMetricB(pn,name,"TapNoteAnimationIsVivid")
|
||||||
|
#define TAP_ADDITION_ANIMATION_IS_VIVID NOTESKIN->GetMetricB(pn,name,"TapNoteAnimationIsVivid")
|
||||||
#define HOLD_HEAD_ANIMATION_IS_VIVID NOTESKIN->GetMetricB(pn,name,"HoldHeadAnimationIsVivid")
|
#define HOLD_HEAD_ANIMATION_IS_VIVID NOTESKIN->GetMetricB(pn,name,"HoldHeadAnimationIsVivid")
|
||||||
#define HOLD_TOPCAP_ANIMATION_IS_VIVID NOTESKIN->GetMetricB(pn,name,"HoldTopCapAnimationIsVivid")
|
#define HOLD_TOPCAP_ANIMATION_IS_VIVID NOTESKIN->GetMetricB(pn,name,"HoldTopCapAnimationIsVivid")
|
||||||
#define HOLD_BODY_ANIMATION_IS_VIVID NOTESKIN->GetMetricB(pn,name,"HoldBodyAnimationIsVivid")
|
#define HOLD_BODY_ANIMATION_IS_VIVID NOTESKIN->GetMetricB(pn,name,"HoldBodyAnimationIsVivid")
|
||||||
@@ -73,12 +75,14 @@ Actor* MakeModelOrSprite( CString sFile )
|
|||||||
struct NoteMetricCache_t {
|
struct NoteMetricCache_t {
|
||||||
bool m_bDrawHoldHeadForTapsOnSameRow;
|
bool m_bDrawHoldHeadForTapsOnSameRow;
|
||||||
float m_fTapNoteAnimationLengthInBeats;
|
float m_fTapNoteAnimationLengthInBeats;
|
||||||
|
float m_fTapAdditionAnimationLengthInBeats;
|
||||||
float m_fHoldHeadAnimationLengthInBeats;
|
float m_fHoldHeadAnimationLengthInBeats;
|
||||||
float m_fHoldTopCapAnimationLengthInBeats;
|
float m_fHoldTopCapAnimationLengthInBeats;
|
||||||
float m_fHoldBodyAnimationLengthInBeats;
|
float m_fHoldBodyAnimationLengthInBeats;
|
||||||
float m_fHoldBottomCapAnimationLengthInBeats;
|
float m_fHoldBottomCapAnimationLengthInBeats;
|
||||||
float m_fHoldTailAnimationLengthInBeats;
|
float m_fHoldTailAnimationLengthInBeats;
|
||||||
bool m_bTapNoteAnimationIsVivid;
|
bool m_bTapNoteAnimationIsVivid;
|
||||||
|
bool m_bTapAdditionAnimationIsVivid;
|
||||||
bool m_bHoldHeadAnimationIsVivid;
|
bool m_bHoldHeadAnimationIsVivid;
|
||||||
bool m_bHoldTopCapAnimationIsVivid;
|
bool m_bHoldTopCapAnimationIsVivid;
|
||||||
bool m_bHoldBodyAnimationIsVivid;
|
bool m_bHoldBodyAnimationIsVivid;
|
||||||
@@ -104,12 +108,14 @@ void NoteMetricCache_t::Load(PlayerNumber pn, const CString &name)
|
|||||||
{
|
{
|
||||||
m_bDrawHoldHeadForTapsOnSameRow = DRAW_HOLD_HEAD_FOR_TAPS_ON_SAME_ROW;
|
m_bDrawHoldHeadForTapsOnSameRow = DRAW_HOLD_HEAD_FOR_TAPS_ON_SAME_ROW;
|
||||||
m_fTapNoteAnimationLengthInBeats = TAP_NOTE_ANIMATION_LENGTH_IN_BEATS;
|
m_fTapNoteAnimationLengthInBeats = TAP_NOTE_ANIMATION_LENGTH_IN_BEATS;
|
||||||
|
m_fTapAdditionAnimationLengthInBeats = TAP_ADDITION_ANIMATION_LENGTH_IN_BEATS;
|
||||||
m_fHoldHeadAnimationLengthInBeats = HOLD_HEAD_ANIMATION_LENGTH_IN_BEATS;
|
m_fHoldHeadAnimationLengthInBeats = HOLD_HEAD_ANIMATION_LENGTH_IN_BEATS;
|
||||||
m_fHoldTopCapAnimationLengthInBeats = HOLD_TOPCAP_ANIMATION_LENGTH_IN_BEATS;
|
m_fHoldTopCapAnimationLengthInBeats = HOLD_TOPCAP_ANIMATION_LENGTH_IN_BEATS;
|
||||||
m_fHoldBodyAnimationLengthInBeats = HOLD_BODY_ANIMATION_LENGTH_IN_BEATS;
|
m_fHoldBodyAnimationLengthInBeats = HOLD_BODY_ANIMATION_LENGTH_IN_BEATS;
|
||||||
m_fHoldBottomCapAnimationLengthInBeats = HOLD_BOTTOMCAP_ANIMATION_LENGTH_IN_BEATS;
|
m_fHoldBottomCapAnimationLengthInBeats = HOLD_BOTTOMCAP_ANIMATION_LENGTH_IN_BEATS;
|
||||||
m_fHoldTailAnimationLengthInBeats = HOLD_TAIL_ANIMATION_LENGTH_IN_BEATS;
|
m_fHoldTailAnimationLengthInBeats = HOLD_TAIL_ANIMATION_LENGTH_IN_BEATS;
|
||||||
m_bTapNoteAnimationIsVivid = TAP_NOTE_ANIMATION_IS_VIVID;
|
m_bTapNoteAnimationIsVivid = TAP_NOTE_ANIMATION_IS_VIVID;
|
||||||
|
m_bTapAdditionAnimationIsVivid = TAP_ADDITION_ANIMATION_IS_VIVID;
|
||||||
m_bHoldHeadAnimationIsVivid = HOLD_HEAD_ANIMATION_IS_VIVID;
|
m_bHoldHeadAnimationIsVivid = HOLD_HEAD_ANIMATION_IS_VIVID;
|
||||||
m_bHoldTopCapAnimationIsVivid = HOLD_TOPCAP_ANIMATION_IS_VIVID;
|
m_bHoldTopCapAnimationIsVivid = HOLD_TOPCAP_ANIMATION_IS_VIVID;
|
||||||
m_bHoldBodyAnimationIsVivid = HOLD_BODY_ANIMATION_IS_VIVID;
|
m_bHoldBodyAnimationIsVivid = HOLD_BODY_ANIMATION_IS_VIVID;
|
||||||
@@ -137,6 +143,8 @@ NoteDisplay::NoteDisplay()
|
|||||||
m_pHoldHeadActive[i] = NULL;
|
m_pHoldHeadActive[i] = NULL;
|
||||||
m_pHoldHeadInactive[i] = NULL;
|
m_pHoldHeadInactive[i] = NULL;
|
||||||
}
|
}
|
||||||
|
m_pTapAddition = NULL;
|
||||||
|
|
||||||
cache = new NoteMetricCache_t;
|
cache = new NoteMetricCache_t;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -148,6 +156,8 @@ NoteDisplay::~NoteDisplay()
|
|||||||
delete m_pHoldHeadActive[i];
|
delete m_pHoldHeadActive[i];
|
||||||
delete m_pHoldHeadInactive[i];
|
delete m_pHoldHeadInactive[i];
|
||||||
}
|
}
|
||||||
|
delete m_pTapAddition;
|
||||||
|
|
||||||
delete cache;
|
delete cache;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -178,6 +188,8 @@ void NoteDisplay::Load( int iColNum, PlayerNumber pn )
|
|||||||
m_pTapNote[0] = MakeModelOrSprite( NOTESKIN->GetPathTo(pn, Button, "tap note") );
|
m_pTapNote[0] = MakeModelOrSprite( NOTESKIN->GetPathTo(pn, Button, "tap note") );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_pTapAddition = MakeModelOrSprite( NOTESKIN->GetPathTo(pn, Button, "tap addition") );
|
||||||
|
|
||||||
if( cache->m_bHoldHeadAnimationIsNoteColor )
|
if( cache->m_bHoldHeadAnimationIsNoteColor )
|
||||||
{
|
{
|
||||||
for( int i=0; i<NOTE_COLOR_IMAGES; i++ )
|
for( int i=0; i<NOTE_COLOR_IMAGES; i++ )
|
||||||
@@ -288,6 +300,25 @@ Actor * NoteDisplay::GetTapNoteActor( float fNoteBeat )
|
|||||||
return pActorOut;
|
return pActorOut;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Actor * NoteDisplay::GetTapAdditionActor( float fNoteBeat )
|
||||||
|
{
|
||||||
|
NoteType nt = NoteType(0);
|
||||||
|
if( cache->m_bTapNoteAnimationIsNoteColor )
|
||||||
|
nt = BeatToNoteType( fNoteBeat );
|
||||||
|
if( nt == NOTE_TYPE_INVALID )
|
||||||
|
nt = NOTE_TYPE_32ND;
|
||||||
|
Actor *pActorOut = m_pTapNote[nt];
|
||||||
|
|
||||||
|
SetActiveFrame(
|
||||||
|
fNoteBeat,
|
||||||
|
*m_pTapAddition,
|
||||||
|
cache->m_fTapAdditionAnimationLengthInBeats,
|
||||||
|
cache->m_bTapAdditionAnimationIsVivid,
|
||||||
|
false );
|
||||||
|
|
||||||
|
return m_pTapAddition;
|
||||||
|
}
|
||||||
|
|
||||||
Sprite * NoteDisplay::GetHoldTopCapSprite( float fNoteBeat, bool bActive )
|
Sprite * NoteDisplay::GetHoldTopCapSprite( float fNoteBeat, bool bActive )
|
||||||
{
|
{
|
||||||
NoteType nt = NoteType(0);
|
NoteType nt = NoteType(0);
|
||||||
@@ -759,7 +790,7 @@ void NoteDisplay::DrawHold( const HoldNote& hn, const bool bActive, const float
|
|||||||
DrawHold( hn, bActive, fLife, fPercentFadeToFail, true );
|
DrawHold( hn, bActive, fLife, fPercentFadeToFail, true );
|
||||||
}
|
}
|
||||||
|
|
||||||
void NoteDisplay::DrawTap( const int iCol, const float fBeat, const bool bOnSameRowAsHoldStart, const float fPercentFadeToFail, const float fLife )
|
void NoteDisplay::DrawTap( const int iCol, const float fBeat, const bool bOnSameRowAsHoldStart, const bool bIsAddition, const float fPercentFadeToFail, const float fLife )
|
||||||
{
|
{
|
||||||
const float fYOffset = ArrowGetYOffset( m_PlayerNumber, fBeat );
|
const float fYOffset = ArrowGetYOffset( m_PlayerNumber, fBeat );
|
||||||
const float fYPos = ArrowGetYPos( m_PlayerNumber, fYOffset );
|
const float fYPos = ArrowGetYPos( m_PlayerNumber, fYOffset );
|
||||||
@@ -772,19 +803,15 @@ void NoteDisplay::DrawTap( const int iCol, const float fBeat, const bool bOnSame
|
|||||||
RageColor diffuse = RageColor(fColorScale,fColorScale,fColorScale,fAlpha);
|
RageColor diffuse = RageColor(fColorScale,fColorScale,fColorScale,fAlpha);
|
||||||
RageColor glow = RageColor(1,1,1,fGlow);
|
RageColor glow = RageColor(1,1,1,fGlow);
|
||||||
|
|
||||||
Actor* pActor;
|
Actor* pActor = NULL;
|
||||||
if( bOnSameRowAsHoldStart && cache->m_bDrawHoldHeadForTapsOnSameRow )
|
if( bIsAddition )
|
||||||
{
|
pActor = GetTapAdditionActor( fBeat );
|
||||||
// draw hold head
|
else if( bOnSameRowAsHoldStart && cache->m_bDrawHoldHeadForTapsOnSameRow )
|
||||||
pActor = GetHoldHeadActor( fBeat, false );
|
pActor = GetHoldHeadActor( fBeat, false );
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
// draw tap
|
|
||||||
pActor = GetTapNoteActor( fBeat );
|
pActor = GetTapNoteActor( fBeat );
|
||||||
pActor->SetRotationZ( fRotation );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
pActor->SetRotationZ( fRotation );
|
||||||
pActor->SetXY( fXPos, fYPos );
|
pActor->SetXY( fXPos, fYPos );
|
||||||
pActor->SetZ( fZPos );
|
pActor->SetZ( fZPos );
|
||||||
pActor->SetDiffuse( diffuse );
|
pActor->SetDiffuse( diffuse );
|
||||||
|
|||||||
@@ -29,12 +29,13 @@ public:
|
|||||||
|
|
||||||
void Load( int iColNum, PlayerNumber pn );
|
void Load( int iColNum, PlayerNumber pn );
|
||||||
|
|
||||||
void DrawTap( const int iCol, const float fBeat, const bool bOnSameRowAsHoldStart, const float fPercentFadeToFail, const float fLife = 1 );
|
void DrawTap( const int iCol, const float fBeat, const bool bOnSameRowAsHoldStart, const bool bIsAddition, const float fPercentFadeToFail, const float fLife = 1 );
|
||||||
void DrawHold( const HoldNote& hn, const bool bActive, const float fLife, const float fPercentFadeToFail, bool bDrawGlowOnly = false );
|
void DrawHold( const HoldNote& hn, const bool bActive, const float fLife, const float fPercentFadeToFail, bool bDrawGlowOnly = false );
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void SetActiveFrame( float fNoteBeat, Actor &actorToSet, float fAnimationLengthInBeats, bool bVivid, bool bNoteColor );
|
void SetActiveFrame( float fNoteBeat, Actor &actorToSet, float fAnimationLengthInBeats, bool bVivid, bool bNoteColor );
|
||||||
Actor *GetTapNoteActor( float fNoteBeat );
|
Actor *GetTapNoteActor( float fNoteBeat );
|
||||||
|
Actor *GetTapAdditionActor( float fNoteBeat );
|
||||||
Actor *GetHoldHeadActor( float fNoteBeat, bool bActive );
|
Actor *GetHoldHeadActor( float fNoteBeat, bool bActive );
|
||||||
Actor* GetHoldTailActor( float fNoteBeat, bool bActive );
|
Actor* GetHoldTailActor( float fNoteBeat, bool bActive );
|
||||||
Sprite *GetHoldTopCapSprite( float fNoteBeat, bool bActive );
|
Sprite *GetHoldTopCapSprite( float fNoteBeat, bool bActive );
|
||||||
@@ -54,6 +55,7 @@ protected:
|
|||||||
#define NOTE_COLOR_IMAGES 6
|
#define NOTE_COLOR_IMAGES 6
|
||||||
|
|
||||||
Actor* m_pTapNote[NOTE_COLOR_IMAGES];
|
Actor* m_pTapNote[NOTE_COLOR_IMAGES];
|
||||||
|
Actor* m_pTapAddition;
|
||||||
Actor* m_pHoldHeadActive[NOTE_COLOR_IMAGES];
|
Actor* m_pHoldHeadActive[NOTE_COLOR_IMAGES];
|
||||||
Actor* m_pHoldHeadInactive[NOTE_COLOR_IMAGES];
|
Actor* m_pHoldHeadInactive[NOTE_COLOR_IMAGES];
|
||||||
Sprite m_sprHoldTopCapActive[NOTE_COLOR_IMAGES];
|
Sprite m_sprHoldTopCapActive[NOTE_COLOR_IMAGES];
|
||||||
|
|||||||
@@ -412,17 +412,18 @@ void NoteField::DrawPrimitives()
|
|||||||
*/
|
*/
|
||||||
for( i=first; i <= last; i+=increment ) // for each row
|
for( i=first; i <= last; i+=increment ) // for each row
|
||||||
{
|
{
|
||||||
if( GetTapNote(c, i) == TAP_EMPTY ) // no note here
|
TapNote tn = GetTapNote(c, i);
|
||||||
|
if( tn == TAP_EMPTY ) // no note here
|
||||||
continue; // skip
|
continue; // skip
|
||||||
|
|
||||||
if( GetTapNote(c, i) == TAP_HOLD_HEAD ) // this is a HoldNote begin marker. Grade it, but don't draw
|
if( tn == TAP_HOLD_HEAD ) // this is a HoldNote begin marker. Grade it, but don't draw
|
||||||
continue; // skip
|
continue; // skip
|
||||||
|
|
||||||
// See if there is a hold step that begins on this index.
|
// See if there is a hold step that begins on this index.
|
||||||
bool bHoldNoteBeginsOnThisBeat = false;
|
bool bHoldNoteBeginsOnThisBeat = false;
|
||||||
for( int c2=0; c2<GetNumTracks(); c2++ )
|
for( int c2=0; c2<GetNumTracks(); c2++ )
|
||||||
{
|
{
|
||||||
if( GetTapNote(c2, i) == TAP_HOLD_HEAD )
|
if( tn == TAP_HOLD_HEAD )
|
||||||
{
|
{
|
||||||
bHoldNoteBeginsOnThisBeat = true;
|
bHoldNoteBeginsOnThisBeat = true;
|
||||||
break;
|
break;
|
||||||
@@ -435,7 +436,10 @@ void NoteField::DrawPrimitives()
|
|||||||
float fBeat = NoteRowToBeat(i);
|
float fBeat = NoteRowToBeat(i);
|
||||||
bIsInSelectionRange = m_fBeginMarker<=fBeat && fBeat<=m_fEndMarker;
|
bIsInSelectionRange = m_fBeginMarker<=fBeat && fBeat<=m_fEndMarker;
|
||||||
}
|
}
|
||||||
m_NoteDisplay[c].DrawTap( c, NoteRowToBeat(i), bHoldNoteBeginsOnThisBeat, bIsInSelectionRange ? fSelectedRangeGlow : m_fPercentFadeToFail );
|
|
||||||
|
bool bIsAddition = (tn == TAP_ADDITION);
|
||||||
|
|
||||||
|
m_NoteDisplay[c].DrawTap( c, NoteRowToBeat(i), bHoldNoteBeginsOnThisBeat, bIsAddition, bIsInSelectionRange ? fSelectedRangeGlow : m_fPercentFadeToFail );
|
||||||
}
|
}
|
||||||
|
|
||||||
g_NoteFieldMode[m_PlayerNumber].EndDrawTrack(c);
|
g_NoteFieldMode[m_PlayerNumber].EndDrawTrack(c);
|
||||||
|
|||||||
@@ -31,6 +31,9 @@ static const TapNote TAP_HOLD_TAIL = '3';
|
|||||||
/* In 4s mode, holds and TAP_HOLD_HEAD are deleted and TAP_HOLD is added: */
|
/* In 4s mode, holds and TAP_HOLD_HEAD are deleted and TAP_HOLD is added: */
|
||||||
static const TapNote TAP_HOLD = '4';
|
static const TapNote TAP_HOLD = '4';
|
||||||
|
|
||||||
|
static const TapNote TAP_ADDITION = '5'; // additional note added by a transform
|
||||||
|
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
TRACK_1 = 0,
|
TRACK_1 = 0,
|
||||||
|
|||||||
@@ -1433,6 +1433,9 @@ void ScreenEdit::HandleAreaMenuChoice( AreaMenuChoice c, int* iAnswers )
|
|||||||
default: ASSERT(0);
|
default: ASSERT(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// bake in the additions
|
||||||
|
NoteDataUtil::ConvertAdditionsToRegular( m_Clipboard );
|
||||||
|
|
||||||
HandleAreaMenuChoice( paste_at_begin_marker, NULL );
|
HandleAreaMenuChoice( paste_at_begin_marker, NULL );
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|||||||
Reference in New Issue
Block a user