public override void Update()
        {
            Mesh.BoundingBox = Mesh.Animations["Walk"].BoundingBox;
            var   ElapsedTime       = Env.ElapsedTime;
            var   Input             = Env.Input;
            float VelocidadAdelante = 0f;
            var   Diff = Env.NuevaCamara.LookAt - Env.NuevaCamara.Position;

            Diff.Y             = 0;
            TipoColisionActual = TiposColision.SinColision;

            if (CanJump && Input.keyPressed(Key.Space))
            {
                VelocidadY = VelocidadSalto;
                CanJump    = false;
            }

            D3DDevice.Instance.Device.RenderState.FillMode = Input.keyDown(Key.F4) ? FillMode.WireFrame : FillMode.Solid;
            if ((Input.keyDown(Key.W) || Input.keyDown(Key.UpArrow)) && Input.keyDown(Key.LeftShift))
            {
                VelocidadAdelante += VelocidadMovimiento * 2;
            }
            else if (Input.keyDown(Key.W) || Input.keyDown(Key.UpArrow))
            {
                VelocidadAdelante += VelocidadMovimiento;
            }
            if (Input.keyDown(Key.S) || Input.keyDown(Key.DownArrow))
            {
                VelocidadAdelante -= VelocidadMovimiento;
            }
            if (Input.keyDown(Key.F8))
            {
                VelocidadMovimiento += 10 * ElapsedTime;
            }
            if (Input.keyDown(Key.F9))
            {
                VelocidadMovimiento -= 10 * ElapsedTime;
            }
            if (Input.keyDown(Key.M))
            {
                Env.CambiarEscenario("Menu");
            }
            if (Input.keyPressed(Key.G))
            {
                if (!modoGod)
                {
                    VelocidadMovimiento = 250;
                    VelocidadSalto      = 250;
                    VelocidadTerminal   = -150;
                    modoGod             = true;
                }
                else
                {
                    restaurarVelocidades();
                }
            }
            if (Input.keyPressed(Key.H))
            {
                ShowHelp = !ShowHelp;
            }
            if (Input.keyDown(Key.F10))
            {
                VelocidadSalto    += 10 * ElapsedTime;
                VelocidadTerminal -= 2 * ElapsedTime;
            }
            if (Input.keyDown(Key.F11))
            {
                VelocidadSalto    -= 10 * ElapsedTime;
                VelocidadTerminal += 2 * ElapsedTime;
            }
            Env.NuevaCamara.keyboardMovement = 0;
            if (Input.keyDown(Key.D) || Input.keyDown(Key.RightArrow))
            {
                Env.NuevaCamara.keyboardMovement += 1;
            }
            if (Input.keyDown(Key.A) || Input.keyDown(Key.LeftArrow))
            {
                Env.NuevaCamara.keyboardMovement -= 1;
            }
            if (Input.keyDown(Key.R))
            {
                Mesh.Position = new TGCVector3(0, 1, 0);
            }

            var versorAdelante = TGCVector3.Normalize(Diff);

            VelocidadY = FastMath.Clamp(VelocidadY + Gravedad * ElapsedTime, VelocidadTerminal, -VelocidadTerminal);
            var LastPos = Mesh.Position;

            // Colision en Y
            oldPos         = Mesh.Position;
            Mesh.Position += new TGCVector3(0, FastMath.Clamp(VelocidadY * ElapsedTime, -DesplazamientoMaximoY, DesplazamientoMaximoY), 0);
            CheckColisionY(ElapsedTime);
            if (UltimoTipoColision == TiposColision.PisoResbaloso)
            {
                VelocidadAdelante += ultimoDesplazamientoAdelante;
            }
            else
            {
                ultimoDesplazamientoAdelante = 0;
            }

            MoveXZ(versorAdelante * FastMath.Clamp(VelocidadAdelante * ElapsedTime, -DesplazamientoMaximoXZ, DesplazamientoMaximoXZ));
            UltimoTipoColision            = TipoColisionActual;
            ultimoDesplazamientoAdelante += VelocidadAdelante * ElapsedTime;

            updateAnimation = true;

            if (Mesh.Position.Y != LastPos.Y)
            {
                SetAnimation("Jump", false);
            }
            else if (Input.keyDown(Key.LeftShift) || Input.keyDown(Key.RightShift))
            {
                SetAnimation("Run");
                updateAnimation  = VelocidadAdelante != 0;
                emitter.Position = Mesh.Position;
            }
            else if (Input.keyDown(Key.C))
            {
                SetAnimation("CrouchWalk");
                updateAnimation = VelocidadAdelante != 0;
            }
            else
            if (VelocidadAdelante != 0)
            {
                SetAnimation("Walk");
            }
            else
            {
                SetAnimation("StandBy");
            }


            Env.NuevaCamara.Target = Mesh.Position;
            Mesh.Rotation          = new TGCVector3(0, Env.NuevaCamara.rotY + FastMath.PI, 0);
            if (updateAnimation)
            {
                Mesh.updateAnimation(ElapsedTime);
            }

            emitter.Position = Mesh.Position;
        }
 public void SetTipoColisionActual(TiposColision resultadoColision)
 {
     TipoColisionActual = resultadoColision;
 }