make music sync follow VisualDelaySeconds by default (fixes
receptors flashing off-sync when VDS is used)
This commit is contained in:
+22
-1
@@ -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 );
|
||||||
|
|||||||
@@ -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:
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -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 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user