protected override void Update()
        {
            if (!GameSession.IsPlaying)
            {
                return;
            }

            float musicTime = MusicController.CurrentTime;

            while (true)
            {
                var frame = replayReader.PeekData();
                if (frame == null || frame.Time > musicTime)
                {
                    if (didSkip)
                    {
                        lastFrameTime = musicTime;
                    }
                    break;
                }

                lastFrameTime = frame.Time;
                didSkip       = frame.IsSkipped;

                // Process update for other game modules.
                inputter.UpdateInputs(frame.Time, frame.Inputs);
                HitObjectHolder.UpdateObjects(musicTime);
                UpdateJudgements(frame);

                replayReader.AdvanceIndex();
            }
        }