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; }