diff --git a/src/GameplayAssist.cpp b/src/GameplayAssist.cpp index ac9ae328b3..af05a52ed4 100644 --- a/src/GameplayAssist.cpp +++ b/src/GameplayAssist.cpp @@ -14,7 +14,7 @@ void GameplayAssist::Init() m_soundAssistMetronomeBeat.Load( THEME->GetPathS("GameplayAssist","metronome beat"), true ); } -void GameplayAssist::PlayTicks( const NoteData &nd ) +void GameplayAssist::PlayTicks( const NoteData &nd, const PlayerState *ps ) { bool bClap = GAMESTATE->m_SongOptions.GetCurrent().m_bAssistClap; bool bMetronome = GAMESTATE->m_SongOptions.GetCurrent().m_bAssistMetronome; @@ -25,9 +25,13 @@ void GameplayAssist::PlayTicks( const NoteData &nd ) * will start coming out the speaker. Compensate for this by boosting fPositionSeconds * ahead. This is just to make sure that we request the sound early enough for it to * come out on time; the actual precise timing is handled by SetStartTime. */ - float fPositionSeconds = GAMESTATE->m_Position.m_fMusicSeconds; + + SongPosition &position = GAMESTATE->m_pPlayerState[ps->m_PlayerNumber]->m_Position; + float fPositionSeconds = position.m_fMusicSeconds; + + //float fPositionSeconds = GAMESTATE->m_Position.m_fMusicSeconds; fPositionSeconds += SOUNDMAN->GetPlayLatency() + (float)CommonMetrics::TICK_EARLY_SECONDS + 0.250f; - const TimingData &timing = GAMESTATE->m_pCurSong->m_SongTiming; + const TimingData &timing = GAMESTATE->m_pCurSteps[ps->m_PlayerNumber]->m_Timing; const float fSongBeat = timing.GetBeatFromElapsedTimeNoOffset( fPositionSeconds ); const int iSongRow = max( 0, BeatToNoteRowNotRounded( fSongBeat ) ); @@ -47,11 +51,11 @@ void GameplayAssist::PlayTicks( const NoteData &nd ) { const float fTickBeat = NoteRowToBeat( iClapRow ); const float fTickSecond = timing.GetElapsedTimeFromBeatNoOffset( fTickBeat ); - float fSecondsUntil = fTickSecond - GAMESTATE->m_Position.m_fMusicSeconds; + float fSecondsUntil = fTickSecond - position.m_fMusicSeconds; fSecondsUntil /= GAMESTATE->m_SongOptions.GetCurrent().m_fMusicRate; /* 2x music rate means the time until the tick is halved */ RageSoundParams p; - p.m_StartTime = GAMESTATE->m_Position.m_LastBeatUpdate + (fSecondsUntil - (float)CommonMetrics::TICK_EARLY_SECONDS); + p.m_StartTime = position.m_LastBeatUpdate + (fSecondsUntil - (float)CommonMetrics::TICK_EARLY_SECONDS); m_soundAssistClap.Play( &p ); } } @@ -83,11 +87,11 @@ void GameplayAssist::PlayTicks( const NoteData &nd ) { const float fTickBeat = NoteRowToBeat( iMetronomeRow ); const float fTickSecond = timing.GetElapsedTimeFromBeatNoOffset( fTickBeat ); - float fSecondsUntil = fTickSecond - GAMESTATE->m_Position.m_fMusicSeconds; + float fSecondsUntil = fTickSecond - position.m_fMusicSeconds; fSecondsUntil /= GAMESTATE->m_SongOptions.GetCurrent().m_fMusicRate; /* 2x music rate means the time until the tick is halved */ RageSoundParams p; - p.m_StartTime = GAMESTATE->m_Position.m_LastBeatUpdate + (fSecondsUntil - (float)CommonMetrics::TICK_EARLY_SECONDS); + p.m_StartTime = position.m_LastBeatUpdate + (fSecondsUntil - (float)CommonMetrics::TICK_EARLY_SECONDS); if( bIsMeasure ) m_soundAssistMetronomeMeasure.Play( &p ); else diff --git a/src/GameplayAssist.h b/src/GameplayAssist.h index 08f6e02f67..f63417b092 100644 --- a/src/GameplayAssist.h +++ b/src/GameplayAssist.h @@ -2,6 +2,7 @@ #define GameplayAssist_H #include "RageSound.h" +#include "PlayerState.h" class NoteData; /** @brief The handclaps and metronomes ready to assist the player. */ @@ -13,7 +14,7 @@ public: /** * @brief Play the sounds in question for the particular chart. * @param nd the note data used for playing the ticks. */ - void PlayTicks( const NoteData &nd ); + void PlayTicks( const NoteData &nd, const PlayerState *ps ); /** @brief Stop playing the sounds. */ void StopPlaying(); private: diff --git a/src/Player.h b/src/Player.h index 2d699e4913..8d85733858 100644 --- a/src/Player.h +++ b/src/Player.h @@ -107,6 +107,8 @@ public: // Lua virtual void PushSelf( lua_State *L ); + + PlayerState * GetPlayerState() { return this->m_pPlayerState; } protected: void UpdateTapNotesMissedOlderThan( float fMissIfOlderThanThisBeat ); diff --git a/src/ScreenEdit.cpp b/src/ScreenEdit.cpp index 1476d06974..0c9faf76ae 100644 --- a/src/ScreenEdit.cpp +++ b/src/ScreenEdit.cpp @@ -892,7 +892,7 @@ void ScreenEdit::PlayTicks() if( m_EditState != STATE_PLAYING ) return; - m_GameplayAssist.PlayTicks( m_Player->GetNoteData() ); + m_GameplayAssist.PlayTicks( m_Player->GetNoteData(), m_Player->GetPlayerState() ); } void ScreenEdit::PlayPreviewMusic() diff --git a/src/ScreenGameplay.cpp b/src/ScreenGameplay.cpp index 231047f933..ac87565d18 100644 --- a/src/ScreenGameplay.cpp +++ b/src/ScreenGameplay.cpp @@ -1388,7 +1388,7 @@ void ScreenGameplay::PlayTicks() { Player &player = *m_vPlayerInfo[0].m_pPlayer; const NoteData &nd = player.GetNoteData(); - m_GameplayAssist.PlayTicks( nd ); + m_GameplayAssist.PlayTicks( nd, player.GetPlayerState() ); } /* Play announcer "type" if it's been at least fSeconds since the last announcer. */