From 7fa80e553069852308752601910b9dc7d59c47f2 Mon Sep 17 00:00:00 2001 From: Chris Danford Date: Thu, 1 Jan 2004 01:53:25 +0000 Subject: [PATCH] change hold explosion format --- .../dance/default/Down Hold Explosion 2x1.png | Bin 0 -> 6941 bytes stepmania/src/GhostArrow.cpp | 8 +-- stepmania/src/GhostArrowRow.cpp | 6 +- stepmania/src/GhostArrowRow.h | 2 +- stepmania/src/HoldGhostArrow.cpp | 53 +++++------------- stepmania/src/HoldGhostArrow.h | 11 ++-- stepmania/src/NoteField.cpp | 8 ++- stepmania/src/NoteField.h | 3 +- stepmania/src/Player.cpp | 3 + 9 files changed, 41 insertions(+), 53 deletions(-) create mode 100644 stepmania/NoteSkins/dance/default/Down Hold Explosion 2x1.png diff --git a/stepmania/NoteSkins/dance/default/Down Hold Explosion 2x1.png b/stepmania/NoteSkins/dance/default/Down Hold Explosion 2x1.png new file mode 100644 index 0000000000000000000000000000000000000000..4d0a1c8d6a6f252d7e726c2c654ddc4a26afdfd4 GIT binary patch literal 6941 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, sButton, sFullFile, true); // optional + CString sPath = NOTESKIN->GetPathToFromNoteSkinAndButton(sNoteSkin, sButton, sFullElement, true); // optional if( sPath.empty() ) - sPath = NOTESKIN->GetPathToFromNoteSkinAndButton(sNoteSkin, sButton, sFile); // not optional + sPath = NOTESKIN->GetPathToFromNoteSkinAndButton(sNoteSkin, sButton, sElement); // not optional m_spr[i].Load( sPath ); } } diff --git a/stepmania/src/GhostArrowRow.cpp b/stepmania/src/GhostArrowRow.cpp index 8d0bdb3bc0..6ae5f46f96 100644 --- a/stepmania/src/GhostArrowRow.cpp +++ b/stepmania/src/GhostArrowRow.cpp @@ -55,7 +55,7 @@ void GhostArrowRow::Load( PlayerNumber pn, CString NoteSkin, float fYReverseOffs m_GhostDim[c].Load( NoteSkin, Button, "tap explosion dim", false); m_GhostBright[c].Load( NoteSkin, Button, "tap explosion bright", false ); m_GhostMine[c].Load( NoteSkin, Button, "tap explosion mine", true ); - m_HoldGhost[c].Load( NOTESKIN->GetPathToFromNoteSkinAndButton(NoteSkin, Button, "hold explosion") ); + m_HoldGhost[c].Load( NoteSkin, Button, "hold explosion" ); } } @@ -115,10 +115,10 @@ void GhostArrowRow::DidTapNote( int iCol, TapNoteScore score, bool bBright ) m_GhostDim[iCol].Step( score ); } -void GhostArrowRow::DidHoldNote( int iCol ) +void GhostArrowRow::SetHoldIsActive( int iCol ) { ASSERT( iCol >= 0 && iCol < m_iNumCols ); - m_HoldGhost[iCol].Step(); + m_HoldGhost[iCol].SetHoldIsActive( true ); } void GhostArrowRow::DidTapMine( int iCol, TapNoteScore score ) diff --git a/stepmania/src/GhostArrowRow.h b/stepmania/src/GhostArrowRow.h index 80df42e6f5..1794d0c9ad 100644 --- a/stepmania/src/GhostArrowRow.h +++ b/stepmania/src/GhostArrowRow.h @@ -31,7 +31,7 @@ public: void DidTapNote( int iCol, TapNoteScore score, bool bBright ); void DidTapMine( int iCol, TapNoteScore score ); - void DidHoldNote( int iCol ); + void SetHoldIsActive( int iCol ); protected: int m_iNumCols; diff --git a/stepmania/src/HoldGhostArrow.cpp b/stepmania/src/HoldGhostArrow.cpp index 3070c819b2..9dc55c5cc0 100644 --- a/stepmania/src/HoldGhostArrow.cpp +++ b/stepmania/src/HoldGhostArrow.cpp @@ -3,7 +3,7 @@ ----------------------------------------------------------------------------- Class: HoldGhostArrow - Desc: A graphic displayed in the HoldJudgment during Dancing. + Desc: See header Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved. Ben Nordstrom @@ -15,57 +15,32 @@ #include "PrefsManager.h" #include "RageException.h" #include "RageTimer.h" -#include -#include "ThemeManager.h" - - -CachedThemeMetricF WARM_UP_SECONDS ("HoldGhostArrow","WarmUpSeconds"); - +#include "NoteSkinManager.h" +#include "GameState.h" HoldGhostArrow::HoldGhostArrow() { - WARM_UP_SECONDS.Refresh(); + m_bHoldIsActive = false; +} - m_bWasSteppedOnLastFrame = false; - m_fHeatLevel = 0; - -// LoadFromSpriteFile( THEME->GetPathTo(GRAPHIC_HOLD_GHOST_ARROW) ); - SetDiffuse( RageColor(1,1,1,1) ); +void HoldGhostArrow::Load( CString sNoteSkin, CString sButton, CString sElement ) +{ + Sprite::Load( NOTESKIN->GetPathToFromNoteSkinAndButton(sNoteSkin, sButton, sElement) ); // not optional + m_sOnCommand = NOTESKIN->GetMetric(sNoteSkin,"HoldGhostArrow","OnCommand"); + this->Command( m_sOnCommand ); } void HoldGhostArrow::Update( float fDeltaTime ) { Sprite::Update( fDeltaTime ); - - if( m_bWasSteppedOnLastFrame ) - m_fHeatLevel += fDeltaTime/(float)WARM_UP_SECONDS; - else - m_fHeatLevel -= fDeltaTime/(float)WARM_UP_SECONDS; - - CLAMP( m_fHeatLevel, 0, 1 ); - - int iStateNum = (int)min( m_fHeatLevel * GetNumStates(), GetNumStates()-1 ); - SetState( iStateNum ); - - if( m_fHeatLevel == 1 ) - { - bool bZooomALittle = fmodf( RageTimer::GetTimeSinceStart(), 1/20.0f ) > 1/40.0f; - SetZoom( bZooomALittle ? 1.04f : 1.0f ); - } - else - SetZoom( 1 ); - SetDiffuse( RageColor(1,1,1,m_fHeatLevel*3) ); - - m_bWasSteppedOnLastFrame = false; // reset for next frame + m_bHoldIsActive = false; } void HoldGhostArrow::DrawPrimitives() { + if( !m_bHoldIsActive ) + return; + Sprite::DrawPrimitives(); } - -void HoldGhostArrow::Step() -{ - m_bWasSteppedOnLastFrame = true; -} diff --git a/stepmania/src/HoldGhostArrow.h b/stepmania/src/HoldGhostArrow.h index e03e0e1ad4..1d955612e1 100644 --- a/stepmania/src/HoldGhostArrow.h +++ b/stepmania/src/HoldGhostArrow.h @@ -4,7 +4,7 @@ ----------------------------------------------------------------------------- Class: HoldGhostArrow - Desc: The "electricity around the stationary arrow as it's pressing a HoldNote. + Desc: The graphic shown while holding a HoldNote. Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved. Ben Nordstrom @@ -13,19 +13,22 @@ */ #include "Sprite.h" +#include "PlayerNumber.h" class HoldGhostArrow : public Sprite { public: HoldGhostArrow(); + virtual void Load( CString sNoteSkin, CString sButton, CString sElement ); + virtual void Update( float fDeltaTime ); virtual void DrawPrimitives(); - void Step(); + void SetHoldIsActive( bool bHoldIsActive ) { m_bHoldIsActive = bHoldIsActive; } - bool m_bWasSteppedOnLastFrame; - float m_fHeatLevel; // brightness - between 0 and 1 + bool m_bHoldIsActive; + CString m_sOnCommand; }; diff --git a/stepmania/src/NoteField.cpp b/stepmania/src/NoteField.cpp index 923036d99b..c48d197669 100644 --- a/stepmania/src/NoteField.cpp +++ b/stepmania/src/NoteField.cpp @@ -97,6 +97,7 @@ void NoteField::Load( const NoteData* pNoteData, PlayerNumber pn, int iFirstPixe NoteDataWithScoring::Init(); m_HeldHoldNotes.clear(); + m_ActiveHoldNotes.clear(); this->CopyAll( pNoteData ); ASSERT( GetNumTracks() == GAMESTATE->GetCurrentStyleDef()->m_iColsPerPlayer ); @@ -519,6 +520,11 @@ void NoteField::DrawPrimitives() const HoldNoteScore hns = GetHoldNoteScore( hn ); const float fLife = GetHoldNoteLife( hn ); const bool bIsHoldingNote = m_HeldHoldNotes[hn]; + const bool bIsActive = m_ActiveHoldNotes[hn]; + + if( bIsActive ) + SearchForSongBeat()->m_GhostArrowRow.SetHoldIsActive( hn.iTrack ); + if( hns == HNS_OK ) // if this HoldNote was completed continue; // don't draw anything @@ -628,5 +634,5 @@ void NoteField::FadeToFail() void NoteField::Step( int iCol ) { SearchForSongBeat()->m_ReceptorArrowRow.Step( iCol ); } void NoteField::SetPressed( int iCol ) { SearchForSongBeat()->m_ReceptorArrowRow.SetPressed( iCol ); } void NoteField::DidTapNote( int iCol, TapNoteScore score, bool bBright ) { SearchForSongBeat()->m_GhostArrowRow.DidTapNote( iCol, score, bBright ); } -void NoteField::DidHoldNote( int iCol ) { SearchForSongBeat()->m_GhostArrowRow.DidHoldNote( iCol ); } +void NoteField::DidHoldNote( int iCol ) { /*SearchForSongBeat()->m_GhostArrowRow.DidHoldNote( iCol );*/ } void NoteField::DidTapMine( int iCol, TapNoteScore score ) { SearchForSongBeat()->m_GhostArrowRow.DidTapMine( iCol, score ); } diff --git a/stepmania/src/NoteField.h b/stepmania/src/NoteField.h index 1539e1b5b1..c322b095a5 100644 --- a/stepmania/src/NoteField.h +++ b/stepmania/src/NoteField.h @@ -39,7 +39,8 @@ public: virtual void Unload(); void RemoveTapNoteRow( int iIndex ); - map m_HeldHoldNotes; // hack: Need this to know when to "light up" the center of hold notes + map m_HeldHoldNotes; // true if button is being held down + map m_ActiveHoldNotes; // true if hold has life > 0 float m_fBeginMarker, m_fEndMarker; // only used with MODE_EDIT diff --git a/stepmania/src/Player.cpp b/stepmania/src/Player.cpp index 6e4d55099f..0d6a13e546 100644 --- a/stepmania/src/Player.cpp +++ b/stepmania/src/Player.cpp @@ -288,6 +288,7 @@ void PlayerMinus::Update( float fDeltaTime ) HoldNoteScore hns = GetHoldNoteScore(hn); m_pNoteField->m_HeldHoldNotes[hn] = false; // set hold flag so NoteField can do intelligent drawing + m_pNoteField->m_ActiveHoldNotes[hn] = false; // set hold flag so NoteField can do intelligent drawing if( hns != HNS_NONE ) // if this HoldNote already has a result @@ -315,6 +316,7 @@ void PlayerMinus::Update( float fDeltaTime ) // set hold flag so NoteField can do intelligent drawing m_pNoteField->m_HeldHoldNotes[hn] = bIsHoldingButton && bSteppedOnTapNote; + m_pNoteField->m_ActiveHoldNotes[hn] = bSteppedOnTapNote; if( bSteppedOnTapNote ) // this note is not judged and we stepped on its head { @@ -324,6 +326,7 @@ void PlayerMinus::Update( float fDeltaTime ) fhn.iStartRow = min( iSongRow, fhn.iEndRow ); } + if( bSteppedOnTapNote && bIsHoldingButton ) { // Increase life