From a2ebcfce01966fcc475bd9be5e5c955545a2b6f0 Mon Sep 17 00:00:00 2001 From: Chris Danford Date: Sun, 10 Aug 2003 06:00:30 +0000 Subject: [PATCH] show different tap graphic for additional notes created by a transform --- stepmania/NoteSkins/dance/default/metrics.ini | 2 + stepmania/src/NoteDataUtil.cpp | 13 ++++- stepmania/src/NoteDataUtil.h | 3 ++ stepmania/src/NoteDisplay.cpp | 47 +++++++++++++++---- stepmania/src/NoteDisplay.h | 4 +- stepmania/src/NoteField.cpp | 12 +++-- stepmania/src/NoteTypes.h | 3 ++ stepmania/src/ScreenEdit.cpp | 3 ++ 8 files changed, 70 insertions(+), 17 deletions(-) diff --git a/stepmania/NoteSkins/dance/default/metrics.ini b/stepmania/NoteSkins/dance/default/metrics.ini index a41c2fd40a..b991d07991 100644 --- a/stepmania/NoteSkins/dance/default/metrics.ini +++ b/stepmania/NoteSkins/dance/default/metrics.ini @@ -1,12 +1,14 @@ [NoteDisplay] DrawHoldHeadForTapsOnSameRow=1 TapNoteAnimationLengthInBeats=4 +TapAdditionAnimationLengthInBeats=4 HoldHeadAnimationLengthInBeats=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. HoldBodyAnimationLengthInBeats=4 // doesn't matter. Only 1 frame anyway. HoldTailAnimationLengthInBeats=4 // doesn't matter. Only 1 frame anyway. TapNoteAnimationIsVivid=1 +TapAdditionAnimationIsVivid=1 HoldHeadAnimationIsVivid=0 HoldTopCapAnimationIsVivid=0 HoldBodyAnimationIsVivid=0 diff --git a/stepmania/src/NoteDataUtil.cpp b/stepmania/src/NoteDataUtil.cpp index a965e1b10a..69c072d0d3 100644 --- a/stepmania/src/NoteDataUtil.cpp +++ b/stepmania/src/NoteDataUtil.cpp @@ -539,7 +539,7 @@ void NoteDataUtil::Wide( NoteData &in ) { iTrackToAdd = (iTrackToAdd+1) % in.GetNumTracks(); } - in.SetTapNote(iTrackToAdd, i, TAP_TAP); + in.SetTapNote(iTrackToAdd, i, TAP_ADDITION); } 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(); @@ -867,3 +867,12 @@ void NoteDataUtil::EliminateNonPassingTaps( NoteData &in, int row, const bool bV 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++ ) + for( int t=0; tGetMetricB(pn,name,"DrawHoldHeadForTapsOnSameRow") #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_TOPCAP_ANIMATION_LENGTH_IN_BEATS NOTESKIN->GetMetricF(pn,name,"HoldTopCapAnimationLengthInBeats") #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_TAIL_ANIMATION_LENGTH_IN_BEATS NOTESKIN->GetMetricF(pn,name,"HoldTailAnimationLengthInBeats") #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_TOPCAP_ANIMATION_IS_VIVID NOTESKIN->GetMetricB(pn,name,"HoldTopCapAnimationIsVivid") #define HOLD_BODY_ANIMATION_IS_VIVID NOTESKIN->GetMetricB(pn,name,"HoldBodyAnimationIsVivid") @@ -73,12 +75,14 @@ Actor* MakeModelOrSprite( CString sFile ) struct NoteMetricCache_t { bool m_bDrawHoldHeadForTapsOnSameRow; float m_fTapNoteAnimationLengthInBeats; + float m_fTapAdditionAnimationLengthInBeats; float m_fHoldHeadAnimationLengthInBeats; float m_fHoldTopCapAnimationLengthInBeats; float m_fHoldBodyAnimationLengthInBeats; float m_fHoldBottomCapAnimationLengthInBeats; float m_fHoldTailAnimationLengthInBeats; bool m_bTapNoteAnimationIsVivid; + bool m_bTapAdditionAnimationIsVivid; bool m_bHoldHeadAnimationIsVivid; bool m_bHoldTopCapAnimationIsVivid; 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_fTapNoteAnimationLengthInBeats = TAP_NOTE_ANIMATION_LENGTH_IN_BEATS; + m_fTapAdditionAnimationLengthInBeats = TAP_ADDITION_ANIMATION_LENGTH_IN_BEATS; m_fHoldHeadAnimationLengthInBeats = HOLD_HEAD_ANIMATION_LENGTH_IN_BEATS; m_fHoldTopCapAnimationLengthInBeats = HOLD_TOPCAP_ANIMATION_LENGTH_IN_BEATS; m_fHoldBodyAnimationLengthInBeats = HOLD_BODY_ANIMATION_LENGTH_IN_BEATS; m_fHoldBottomCapAnimationLengthInBeats = HOLD_BOTTOMCAP_ANIMATION_LENGTH_IN_BEATS; m_fHoldTailAnimationLengthInBeats = HOLD_TAIL_ANIMATION_LENGTH_IN_BEATS; m_bTapNoteAnimationIsVivid = TAP_NOTE_ANIMATION_IS_VIVID; + m_bTapAdditionAnimationIsVivid = TAP_ADDITION_ANIMATION_IS_VIVID; m_bHoldHeadAnimationIsVivid = HOLD_HEAD_ANIMATION_IS_VIVID; m_bHoldTopCapAnimationIsVivid = HOLD_TOPCAP_ANIMATION_IS_VIVID; m_bHoldBodyAnimationIsVivid = HOLD_BODY_ANIMATION_IS_VIVID; @@ -137,6 +143,8 @@ NoteDisplay::NoteDisplay() m_pHoldHeadActive[i] = NULL; m_pHoldHeadInactive[i] = NULL; } + m_pTapAddition = NULL; + cache = new NoteMetricCache_t; } @@ -148,6 +156,8 @@ NoteDisplay::~NoteDisplay() delete m_pHoldHeadActive[i]; delete m_pHoldHeadInactive[i]; } + delete m_pTapAddition; + delete cache; } @@ -178,6 +188,8 @@ void NoteDisplay::Load( int iColNum, PlayerNumber pn ) m_pTapNote[0] = MakeModelOrSprite( NOTESKIN->GetPathTo(pn, Button, "tap note") ); } + m_pTapAddition = MakeModelOrSprite( NOTESKIN->GetPathTo(pn, Button, "tap addition") ); + if( cache->m_bHoldHeadAnimationIsNoteColor ) { for( int i=0; im_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 ) { 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 ); } -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 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 glow = RageColor(1,1,1,fGlow); - Actor* pActor; - if( bOnSameRowAsHoldStart && cache->m_bDrawHoldHeadForTapsOnSameRow ) - { - // draw hold head + Actor* pActor = NULL; + if( bIsAddition ) + pActor = GetTapAdditionActor( fBeat ); + else if( bOnSameRowAsHoldStart && cache->m_bDrawHoldHeadForTapsOnSameRow ) pActor = GetHoldHeadActor( fBeat, false ); - } else - { - // draw tap pActor = GetTapNoteActor( fBeat ); - pActor->SetRotationZ( fRotation ); - } + pActor->SetRotationZ( fRotation ); pActor->SetXY( fXPos, fYPos ); pActor->SetZ( fZPos ); pActor->SetDiffuse( diffuse ); diff --git a/stepmania/src/NoteDisplay.h b/stepmania/src/NoteDisplay.h index e28160c3c1..070a4564e7 100644 --- a/stepmania/src/NoteDisplay.h +++ b/stepmania/src/NoteDisplay.h @@ -29,12 +29,13 @@ public: 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 ); protected: void SetActiveFrame( float fNoteBeat, Actor &actorToSet, float fAnimationLengthInBeats, bool bVivid, bool bNoteColor ); Actor *GetTapNoteActor( float fNoteBeat ); + Actor *GetTapAdditionActor( float fNoteBeat ); Actor *GetHoldHeadActor( float fNoteBeat, bool bActive ); Actor* GetHoldTailActor( float fNoteBeat, bool bActive ); Sprite *GetHoldTopCapSprite( float fNoteBeat, bool bActive ); @@ -54,6 +55,7 @@ protected: #define NOTE_COLOR_IMAGES 6 Actor* m_pTapNote[NOTE_COLOR_IMAGES]; + Actor* m_pTapAddition; Actor* m_pHoldHeadActive[NOTE_COLOR_IMAGES]; Actor* m_pHoldHeadInactive[NOTE_COLOR_IMAGES]; Sprite m_sprHoldTopCapActive[NOTE_COLOR_IMAGES]; diff --git a/stepmania/src/NoteField.cpp b/stepmania/src/NoteField.cpp index f935c8df90..71a91d5b43 100644 --- a/stepmania/src/NoteField.cpp +++ b/stepmania/src/NoteField.cpp @@ -412,17 +412,18 @@ void NoteField::DrawPrimitives() */ 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 - 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 // See if there is a hold step that begins on this index. bool bHoldNoteBeginsOnThisBeat = false; for( int c2=0; c2