From a7d13060a00721dae0e29d9fa44112b6dc3f7f08 Mon Sep 17 00:00:00 2001 From: Jimin Park Date: Sun, 9 Jan 2022 23:06:21 +0900 Subject: [PATCH] Fixed a problem where BeatmapPlayback::GetObjectsInViewRange did not get objects properly during practice mode --- Beatmap/src/BeatmapPlayback.cpp | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/Beatmap/src/BeatmapPlayback.cpp b/Beatmap/src/BeatmapPlayback.cpp index 7ab8218bb..ebcc529d2 100644 --- a/Beatmap/src/BeatmapPlayback.cpp +++ b/Beatmap/src/BeatmapPlayback.cpp @@ -22,10 +22,12 @@ bool BeatmapPlayback::Reset(MapTime initTime, MapTime start) m_playRange = { start, start }; m_currObject = m_beatmap->GetFirstObjectState(); - m_currLaserObject = m_beatmap->GetFirstObjectState(); - m_currAlertObject = m_beatmap->GetFirstObjectState(); + m_currObject = m_SelectHitObject(std::max(initTime, start), true); - m_currentTiming = m_beatmap->GetFirstTimingPoint(); + m_currLaserObject = m_currObject; + m_currAlertObject = m_currObject; + + m_currentTiming = m_beatmap->GetTimingPoint(initTime); m_currentLaneTogglePoint = m_beatmap->GetFirstLaneTogglePoint(); m_currentTrackRollBehaviour = TrackRollBehaviour::Normal; @@ -349,10 +351,20 @@ void BeatmapPlayback::GetObjectsInViewRange(float numBeats, Vector MapTime currRefTime = m_playbackTime; float currBeats = 0.0f; - for (Beatmap::ObjectsIterator obj = m_currObject; !IsEndObject(obj) && m_playRange.Includes((*obj)->time); ++obj) + for (Beatmap::ObjectsIterator obj = m_currObject; !IsEndObject(obj); ++obj) { const MapTime objTime = (*obj)->time; + if (!m_playRange.Includes(objTime)) + { + if (m_playRange.HasEnd() && objTime >= m_playRange.end) + { + break; + } + + continue; + } + if (!IsEndTiming(tp_next) && tp_next->time <= objTime) { currBeats += m_beatmap->GetBeatCountWithScrollSpeedApplied(currRefTime, tp_next->time, tp);