Added lookup table system to TimingData so that GetBeatAndBPS and GetElapsedTime don't have to walk through the entire list of timing segments several times every frame during gameplay.

This commit is contained in:
Kyzentun
2015-03-14 23:17:35 -06:00
parent 0d309e633d
commit 2b7ebb3729
7 changed files with 410 additions and 237 deletions
+12 -6
View File
@@ -11,7 +11,15 @@ void SongPosition::UpdateSongPosition( float fPositionSeconds, const TimingData
else
m_LastBeatUpdate.Touch();
timing.GetBeatAndBPSFromElapsedTime( fPositionSeconds, m_fSongBeat, m_fCurBPS, m_bFreeze, m_bDelay, m_iWarpBeginRow, m_fWarpDestination );
TimingData::GetBeatArgs beat_info;
beat_info.elapsed_time= fPositionSeconds;
timing.GetBeatAndBPSFromElapsedTime(beat_info);
m_fSongBeat= beat_info.beat;
m_fCurBPS= beat_info.bps_out;
m_bFreeze= beat_info.freeze_out;
m_bDelay= beat_info.delay_out;
m_iWarpBeginRow= beat_info.warp_begin_out;
m_fWarpDestination= beat_info.warp_dest_out;
// "Crash reason : -243478.890625 -48695.773438"
// The question is why is -2000 used as the limit? -aj
@@ -24,11 +32,9 @@ void SongPosition::UpdateSongPosition( float fPositionSeconds, const TimingData
m_fSongBeatNoOffset = timing.GetBeatFromElapsedTimeNoOffset( fPositionSeconds );
m_fMusicSecondsVisible = fPositionSeconds - g_fVisualDelaySeconds.Get();
float fThrowAway, fThrowAway2;
bool bThrowAway;
int iThrowAway;
timing.GetBeatAndBPSFromElapsedTime( m_fMusicSecondsVisible, m_fSongBeatVisible, fThrowAway, bThrowAway, bThrowAway, iThrowAway, fThrowAway2 );
beat_info.elapsed_time= m_fMusicSecondsVisible;
timing.GetBeatAndBPSFromElapsedTime(beat_info);
m_fSongBeatVisible= beat_info.beat;
}
void SongPosition::Reset()