show different tap graphic for additional notes created by a transform

This commit is contained in:
Chris Danford
2003-08-10 06:00:30 +00:00
parent be8e5ba6c6
commit a2ebcfce01
8 changed files with 70 additions and 17 deletions
@@ -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
+11 -2
View File
@@ -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);
}
+3
View File
@@ -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 );
+37 -10
View File
@@ -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 );
+3 -1
View File
@@ -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];
+8 -4
View File
@@ -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);
+3
View File
@@ -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,
+3
View File
@@ -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;