From ab178b1e6535849b6679bf5d5f17701a1da640a3 Mon Sep 17 00:00:00 2001 From: Thai Pangsakulyanont Date: Fri, 20 May 2011 21:33:42 +0700 Subject: [PATCH] An attempt to make the arrows flash with the steps' timing. If it works then we can expand it to..... I don't know, lifebars? --- src/Actor.cpp | 9 ++++++++- src/Actor.h | 8 ++++++++ src/NoteField.cpp | 5 +++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/Actor.cpp b/src/Actor.cpp index 3191d98d56..99b49f6b06 100644 --- a/src/Actor.cpp +++ b/src/Actor.cpp @@ -18,6 +18,8 @@ static Preference g_bShowMasks("ShowMasks", false); +PlayerNumber Actor::m_ActivePlayerNumber = PLAYER_1; + /** * @brief Set up a hidden Actor that won't be drawn. * @@ -683,6 +685,11 @@ void Actor::UpdateInternal( float fDeltaTime ) m_fSecsIntoEffect = g_fCurrentBGMBeat; break; + case CLOCK_BGM_BEAT_PLAYER_ACTIVE: + m_fEffectDelta = g_vfCurrentBGMBeatPlayer[m_ActivePlayerNumber] - m_fSecsIntoEffect; + m_fSecsIntoEffect = g_vfCurrentBGMBeatPlayerNoOffset[m_ActivePlayerNumber]; + break; + case CLOCK_BGM_BEAT_PLAYER1: m_fEffectDelta = g_vfCurrentBGMBeatPlayer[PLAYER_1] - m_fSecsIntoEffect; m_fSecsIntoEffect = g_vfCurrentBGMBeatPlayerNoOffset[PLAYER_1]; @@ -847,7 +854,7 @@ void Actor::SetEffectClockString( const RString &s ) { if (s.EqualsNoCase("timer")) this->SetEffectClock( CLOCK_TIMER ); if (s.EqualsNoCase("timerglobal")) this->SetEffectClock( CLOCK_TIMER_GLOBAL ); - else if(s.EqualsNoCase("beat")) this->SetEffectClock( CLOCK_BGM_BEAT ); + else if(s.EqualsNoCase("beat")) this->SetEffectClock( CLOCK_BGM_BEAT_ACTIVE ); else if(s.EqualsNoCase("music")) this->SetEffectClock( CLOCK_BGM_TIME ); else if(s.EqualsNoCase("bgm")) this->SetEffectClock( CLOCK_BGM_BEAT ); // compat, deprecated else if(s.EqualsNoCase("musicnooffset"))this->SetEffectClock( CLOCK_BGM_TIME_NO_OFFSET ); diff --git a/src/Actor.h b/src/Actor.h index 919d4994f7..8ab898b22e 100644 --- a/src/Actor.h +++ b/src/Actor.h @@ -113,6 +113,13 @@ public: static void SetPlayerBGMBeat( PlayerNumber pn, float fBeat, float fBeatNoOffset ); static void SetBGMLight( int iLightNumber, float fCabinetLights ); + /** + * @brief The actively-drawing player number. This is used as a hack + * so that we don't need to tell each actor which player it belongs to. + * This is used to figure out the right player for "beat" effect clock. + */ + static PlayerNumber m_ActivePlayerNumber; + /** * @brief The list of the different effects. * @@ -135,6 +142,7 @@ public: CLOCK_BGM_BEAT_NO_OFFSET, CLOCK_BGM_BEAT_PLAYER1, CLOCK_BGM_BEAT_PLAYER2, + CLOCK_BGM_BEAT_PLAYER_ACTIVE, CLOCK_LIGHT_1 = 1000, CLOCK_LIGHT_LAST = 1100, NUM_CLOCKS diff --git a/src/NoteField.cpp b/src/NoteField.cpp index cdf67941c8..c60b0db328 100644 --- a/src/NoteField.cpp +++ b/src/NoteField.cpp @@ -19,6 +19,7 @@ #include "BackgroundUtil.h" #include "Course.h" #include "NoteData.h" +#include "Actor.h" static ThemeMetric SHOW_BOARD( "NoteField", "ShowBoard" ); static ThemeMetric SHOW_BEAT_BARS( "NoteField", "ShowBeatBars" ); @@ -765,6 +766,10 @@ bool NoteField::IsOnScreen( float fBeat, int iCol, int iDrawDistanceAfterTargets void NoteField::DrawPrimitives() { + + // XXX Hack: Set Actor's active player number so the notes get the flashing that matches the steps. + Actor::m_ActivePlayerNumber = m_pPlayerState->m_PlayerNumber; + //LOG->Trace( "NoteField::DrawPrimitives()" ); // This should be filled in on the first update.