private IEnumerator Sequence()
        {
            Player player;

            do
            {
                yield return(null);

                player = Scene.Tracker.GetEntity <Player>();
            }while (!triggered && (manualTrigger || player == null || player.X < X + 30f || player.X > Right + 8f));

            SoundSource shakingSfx = baseData.Get <SoundSource>("shakingSfx");

            shakingSfx.Play(SFX.game_00_fallingblock_prologue_shake);
            float  time   = delay;
            Shaker shaker = new Shaker(time, removeOnFinish: true, v => baseData["shake"] = v);

            if (delay > 0f)
            {
                Add(shaker);
            }
            Input.Rumble(RumbleStrength.Medium, RumbleLength.Medium);

            while (time > 0f)
            {
                player = Scene.Tracker.GetEntity <Player>();
                if (!manualTrigger && player != null && (player.X >= X + Width - 8f || player.X < X + 28f))
                {
                    shaker.RemoveSelf();
                    break;
                }
                yield return(null);

                time -= Engine.DeltaTime;
            }

            for (int i = 2; i < Width; i += 4)
            {
                SceneAs <Level>().Particles.Emit(FallingBlock.P_FallDustA, 2, new Vector2(X + i, Y), Vector2.One * 4f, (float)Math.PI / 2f);
                SceneAs <Level>().Particles.Emit(FallingBlock.P_FallDustB, 2, new Vector2(X + i, Y), Vector2.One * 4f);
            }
            shakingSfx.Param("release", 1f);

            time = 0f;
            do
            {
                yield return(null);

                time = Calc.Approach(time, 1f, speed * Engine.DeltaTime);
                MoveTo(Vector2.Lerp(baseData.Get <Vector2>("start"), baseData.Get <Vector2>("end"), Ease.CubeIn(time)));
            }while (time < 1f);

            for (int j = 0; j <= Width; j += 4)
            {
                SceneAs <Level>().ParticlesFG.Emit(FallingBlock.P_FallDustA, 1, new Vector2(X + j, Bottom), Vector2.One * 4f, -(float)Math.PI / 2f);
                float direction = (j < Width / 2f) ? ((float)Math.PI) : 0f;
                SceneAs <Level>().ParticlesFG.Emit(FallingBlock.P_LandDust, 1, new Vector2(X + j, Bottom), Vector2.One * 4f, direction);
            }
            shakingSfx.Stop();
            Audio.Play(SFX.game_00_fallingblock_prologue_impact, Position);
            SceneAs <Level>().Shake();
            Input.Rumble(RumbleStrength.Strong, RumbleLength.Medium);
            Add(new Shaker(0.25f, removeOnFinish: true, v => baseData["shake"] = v));
        }