private IEnumerator ZipMoverSequence() { Vector2 start = Position; while (true) { if (!HasPlayerRider()) { yield return(null); continue; } sfx.Play((theme == Themes.Normal) ? "event:/game/01_forsaken_city/zip_mover" : "event:/new_content/game/10_farewell/zip_mover"); Input.Rumble(RumbleStrength.Medium, RumbleLength.Short); StartShaking(0.1f); yield return(0.1f); streetlight.SetAnimationFrame(3); StopPlayerRunIntoAnimation = false; float at2 = 0f; while (at2 < 1f) { yield return(null); at2 = Calc.Approach(at2, 1f, 2f * Engine.DeltaTime); percent = Ease.SineIn(at2); Vector2 to = Vector2.Lerp(start, target, percent); ScrapeParticlesCheck(to); if (Scene.OnInterval(0.1f)) { pathRenderer.CreateSparks(); } MoveTo(to); } StartShaking(0.2f); Input.Rumble(RumbleStrength.Strong, RumbleLength.Medium); SceneAs <Level>().Shake(); StopPlayerRunIntoAnimation = true; yield return(0.5f); StopPlayerRunIntoAnimation = false; streetlight.SetAnimationFrame(2); float at = 0f; while (at < 1f) { yield return(null); at = Calc.Approach(at, 1f, 0.5f * Engine.DeltaTime); percent = 1f - Ease.SineIn(at); Vector2 to2 = Vector2.Lerp(target, start, Ease.SineIn(at)); MoveTo(to2); } StopPlayerRunIntoAnimation = true; StartShaking(0.2f); streetlight.SetAnimationFrame(1); yield return(0.5f); TrySwitchTroll(); yield return(null); } }