public override void Update() { if (HitObjectManager != null) { HitObject nextObject = HitObjectManager.NextObject; HitObject nextObjectConnected = nextObject?.connectedObject; bool objectHasFinger = false; bool connectedObjectHasFinger = false; foreach (pDrawable finger in fingers) { if (finger.Tag is HitObject obj) { if (obj == nextObject) { objectHasFinger = true; } if (obj == nextObjectConnected) { connectedObjectHasFinger = true; } if (obj.ClockingNow >= obj.EndTime) { finger.Tag = null; finger.FadeOut(800, 0.3f); finger.Transform(new TransformationV(finger.Position, finger == leftFinger ? idleLeft : idleRight, Clock.ModeTime + 300, Clock.ModeTime + 1100, EasingTypes.InOut)); } else if (obj.IsActive) { finger.Position = obj is Spinner?spinningPositionFor(obj.ClockingNow) : obj.TrackingPosition; if (Player.Autoplay && TouchBurster != null && AudioEngine.Music != null && AudioEngine.Music.IsElapsing) { TouchBurster.Burst(GameBase.GamefieldToStandard(finger.Position + finger.Offset), 40, 0.5f, 1); } } else if (obj.IsVisible) { int timeUntilObject = obj.StartTime - obj.ClockingNow; //if (timeUntilObject < 500) { Vector2 src = finger.Position; Vector2 dest = obj is Spinner?spinningPositionFor(obj.StartTime) : obj.TrackingPosition; lastFinger = finger; finger.Position = src + (dest - src) * 0.015f * MovementSpeed * (float)Clock.ElapsedMilliseconds; if (!(obj is Spinner)) { float vOffset = 0; if (timeUntilObject > 100) { vOffset = (1 - pMathHelper.ClampToOne((timeUntilObject - 100) / 300f)); } else { vOffset = pMathHelper.ClampToOne(timeUntilObject / 100f); } finger.Offset.Y = vOffset * -55; finger.ScaleScalar = 1 + 0.6f * vOffset; } if (Player.Autoplay && TouchBurster != null && AudioEngine.Music != null && AudioEngine.Music.IsElapsing) { TouchBurster.Burst(GameBase.GamefieldToStandard(finger.Position + finger.Offset), 40, 0.5f, 1); } } } } } { int timeUntilObject = nextObject == null ? int.MaxValue : nextObject.StartTime - nextObject.ClockingNow; if (timeUntilObject < 450) { if (!objectHasFinger) { checkObject(nextObject); } if (nextObjectConnected != null && !connectedObjectHasFinger) { checkObject(nextObjectConnected); } } } } leftFinger.Update(); rightFinger.Update(); leftFinger2.Position = leftFinger.Position; leftFinger2.Offset = leftFinger.Offset; leftFinger2.ScaleScalar = leftFinger.ScaleScalar; leftFinger2.Alpha = leftFinger.Alpha; rightFinger2.Position = rightFinger.Position; rightFinger2.Offset = rightFinger.Offset; rightFinger2.ScaleScalar = rightFinger.ScaleScalar; rightFinger2.Alpha = rightFinger.Alpha; base.Update(); }