make music sync follow VisualDelaySeconds by default (fixes

receptors flashing off-sync when VDS is used)
This commit is contained in:
Glenn Maynard
2007-06-18 21:02:28 +00:00
parent 579e47ce19
commit 5c93e0f2fc
3 changed files with 28 additions and 4 deletions
+22 -1
View File
@@ -29,6 +29,8 @@ public:
REGISTER_ACTOR_CLASS_WITH_NAME( HiddenActor, Actor ) REGISTER_ACTOR_CLASS_WITH_NAME( HiddenActor, Actor )
float Actor::g_fCurrentBGMTime = 0, Actor::g_fCurrentBGMBeat; float Actor::g_fCurrentBGMTime = 0, Actor::g_fCurrentBGMBeat;
float Actor::g_fCurrentBGMTimeNoOffset = 0, Actor::g_fCurrentBGMBeatNoOffset = 0;
Actor *Actor::Copy() const { return new Actor(*this); } Actor *Actor::Copy() const { return new Actor(*this); }
@@ -50,10 +52,16 @@ static const char *VertAlignNames[] = {
XToString( VertAlign ); XToString( VertAlign );
LuaXType( VertAlign ); LuaXType( VertAlign );
void Actor::SetBGMTime( float fTime, float fBeat ) void Actor::SetBGMTime( float fTime, float fBeat, float fTimeNoOffset, float fBeatNoOffset )
{ {
g_fCurrentBGMTime = fTime; g_fCurrentBGMTime = fTime;
g_fCurrentBGMBeat = fBeat; g_fCurrentBGMBeat = fBeat;
/* This timer is generally only used for effects tied to the background music
* when GameSoundManager is aligning music beats. Alignment doesn't handle
* g_fVisualDelaySeconds. */
g_fCurrentBGMTimeNoOffset = fTimeNoOffset;
g_fCurrentBGMBeatNoOffset = fBeatNoOffset;
} }
void Actor::SetBGMLight( int iLightNumber, float fCabinetLights ) void Actor::SetBGMLight( int iLightNumber, float fCabinetLights )
@@ -647,6 +655,17 @@ void Actor::UpdateInternal( float fDeltaTime )
m_fEffectDelta = g_fCurrentBGMTime - m_fSecsIntoEffect; m_fEffectDelta = g_fCurrentBGMTime - m_fSecsIntoEffect;
m_fSecsIntoEffect = g_fCurrentBGMTime; m_fSecsIntoEffect = g_fCurrentBGMTime;
break; break;
case CLOCK_BGM_BEAT_NO_OFFSET:
m_fEffectDelta = g_fCurrentBGMBeatNoOffset - m_fSecsIntoEffect;
m_fSecsIntoEffect = g_fCurrentBGMBeatNoOffset;
break;
case CLOCK_BGM_TIME_NO_OFFSET:
m_fEffectDelta = g_fCurrentBGMTimeNoOffset - m_fSecsIntoEffect;
m_fSecsIntoEffect = g_fCurrentBGMTimeNoOffset;
break;
default: default:
if( m_EffectClock >= CLOCK_LIGHT_1 && m_EffectClock <= CLOCK_LIGHT_LAST ) if( m_EffectClock >= CLOCK_LIGHT_1 && m_EffectClock <= CLOCK_LIGHT_LAST )
{ {
@@ -776,6 +795,8 @@ void Actor::SetEffectClockString( const RString &s )
else if(s.EqualsNoCase("beat")) this->SetEffectClock( CLOCK_BGM_BEAT ); else if(s.EqualsNoCase("beat")) this->SetEffectClock( CLOCK_BGM_BEAT );
else if(s.EqualsNoCase("music")) this->SetEffectClock( CLOCK_BGM_TIME ); 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("bgm")) this->SetEffectClock( CLOCK_BGM_BEAT ); // compat, deprecated
else if(s.EqualsNoCase("musicnooffset"))this->SetEffectClock( CLOCK_BGM_TIME_NO_OFFSET );
else if(s.EqualsNoCase("beatnooffset")) this->SetEffectClock( CLOCK_BGM_BEAT_NO_OFFSET );
else else
{ {
CabinetLight cl = StringToCabinetLight( s ); CabinetLight cl = StringToCabinetLight( s );
+4 -1
View File
@@ -60,7 +60,7 @@ public:
virtual void InitState(); virtual void InitState();
virtual void LoadFromNode( const XNode* pNode ); virtual void LoadFromNode( const XNode* pNode );
static void SetBGMTime( float fTime, float fBeat ); static void SetBGMTime( float fTime, float fBeat, float fTimeNoOffset, float fBeatNoOffset );
static void SetBGMLight( int iLightNumber, float fCabinetLights ); static void SetBGMLight( int iLightNumber, float fCabinetLights );
enum Effect { no_effect, enum Effect { no_effect,
@@ -97,6 +97,8 @@ public:
CLOCK_TIMER_GLOBAL, CLOCK_TIMER_GLOBAL,
CLOCK_BGM_TIME, CLOCK_BGM_TIME,
CLOCK_BGM_BEAT, CLOCK_BGM_BEAT,
CLOCK_BGM_TIME_NO_OFFSET,
CLOCK_BGM_BEAT_NO_OFFSET,
CLOCK_LIGHT_1 = 1000, CLOCK_LIGHT_1 = 1000,
CLOCK_LIGHT_LAST = 1100, CLOCK_LIGHT_LAST = 1100,
NUM_CLOCKS NUM_CLOCKS
@@ -480,6 +482,7 @@ protected:
// global state // global state
// //
static float g_fCurrentBGMTime, g_fCurrentBGMBeat; static float g_fCurrentBGMTime, g_fCurrentBGMBeat;
static float g_fCurrentBGMTimeNoOffset, g_fCurrentBGMBeatNoOffset;
private: private:
// //
+2 -2
View File
@@ -804,7 +804,7 @@ void GameState::ResetMusicStatistics()
m_bFreeze = false; m_bFreeze = false;
m_fMusicSecondsVisible = 0; m_fMusicSecondsVisible = 0;
m_fSongBeatVisible = 0; m_fSongBeatVisible = 0;
Actor::SetBGMTime( 0, 0 ); Actor::SetBGMTime( 0, 0, 0, 0 );
FOREACH_PlayerNumber( p ) FOREACH_PlayerNumber( p )
@@ -860,13 +860,13 @@ void GameState::UpdateSongPosition( float fPositionSeconds, const TimingData &ti
m_fLightSongBeat = timing.GetBeatFromElapsedTime( fPositionSeconds + g_fLightsAheadSeconds ); m_fLightSongBeat = timing.GetBeatFromElapsedTime( fPositionSeconds + g_fLightsAheadSeconds );
m_fSongBeatNoOffset = timing.GetBeatFromElapsedTimeNoOffset( fPositionSeconds ); m_fSongBeatNoOffset = timing.GetBeatFromElapsedTimeNoOffset( fPositionSeconds );
Actor::SetBGMTime( fPositionSeconds, m_fSongBeatNoOffset );
m_fMusicSecondsVisible = fPositionSeconds - g_fVisualDelaySeconds.Get(); m_fMusicSecondsVisible = fPositionSeconds - g_fVisualDelaySeconds.Get();
float fThrowAway; float fThrowAway;
bool bThrowAway; bool bThrowAway;
timing.GetBeatAndBPSFromElapsedTime( m_fMusicSecondsVisible, m_fSongBeatVisible, fThrowAway, bThrowAway ); timing.GetBeatAndBPSFromElapsedTime( m_fMusicSecondsVisible, m_fSongBeatVisible, fThrowAway, bThrowAway );
Actor::SetBGMTime( m_fMusicSecondsVisible, m_fSongBeatVisible, fPositionSeconds, m_fSongBeatNoOffset );
// LOG->Trace( "m_fMusicSeconds = %f, m_fSongBeat = %f, m_fCurBPS = %f, m_bFreeze = %f", m_fMusicSeconds, m_fSongBeat, m_fCurBPS, m_bFreeze ); // LOG->Trace( "m_fMusicSeconds = %f, m_fSongBeat = %f, m_fCurBPS = %f, m_bFreeze = %f", m_fMusicSeconds, m_fSongBeat, m_fCurBPS, m_bFreeze );
} }