public override void Update(KeyboardDevice keyboard)
        {
            switch (mode)
            {
            case MovementSection.SLIDE:
                if (!ent.IsOnGround())
                {
                    double X = flagPos.X - ent.position.X;
                    X = Math.Min(Math.Abs(X), DOWN_CORRECTION_SPEED) * Math.Sign(X);
                    MoveBy(new Vec2d(X, -SPEED_DOWN));
                    ((StandardGameHUD)owner.HUD).AddCoinParticle(StandardGameHUD.COIN_PARTICLE_COMPLETIONCOUNT / 2);
                }
                else
                {
                    mode = MovementSection.WALK;
                }
                break;

            case MovementSection.WALK:
                DoGravitationalMovement(new Vec2d(SPEED_WALK - movementDelta.X, 0));
                break;

            default:
                ent.DoCollisions();
                break;
            }
        }
        public void Defaut()
        {
            // Arrange
            MovementSection speeds = new MovementSection();

            // Assert
            Assert.IsInstanceOf <Movement>(speeds.Burrow);
            Assert.IsFalse(speeds.Burrow.BaseSpeed.HasValue);

            Assert.IsInstanceOf <Movement>(speeds.Climb);
            Assert.IsFalse(speeds.Climb.BaseSpeed.HasValue);

            Assert.IsInstanceOf <Fly>(speeds.Fly);
            Assert.IsFalse(speeds.Fly.BaseSpeed.HasValue);

            Assert.IsInstanceOf <Movement>(speeds.Swim);
            Assert.IsFalse(speeds.Swim.BaseSpeed.HasValue);

            Assert.IsInstanceOf <Movement>(speeds.Land);
            Assert.IsTrue(speeds.Land.BaseSpeed.HasValue);
            Assert.AreEqual(6, speeds.Land.BaseSpeed.Value);

            Assert.That(speeds.GetAll(), Is.EquivalentTo(new IMovement[] { speeds.Burrow, speeds.Climb, speeds.Fly, speeds.Land, speeds.Swim }));
        }