/// <summary> /// Handles the input and movement of the character. /// </summary> /// <param name="dt">Time since last frame in simulation seconds.</param> /// <param name="previousKeyboardInput">The last frame's keyboard state.</param> /// <param name="keyboardInput">The current frame's keyboard state.</param> /// <param name="previousGamePadInput">The last frame's gamepad state.</param> /// <param name="gamePadInput">The current frame's keyboard state.</param> public void Update(float dt, KeyboardState previousKeyboardInput, KeyboardState keyboardInput, GamePadState previousGamePadInput, GamePadState gamePadInput) { if (IsActive) { CameraControlScheme.Update(dt); Vector2 totalMovement = Vector2.Zero; #if XBOX360 totalMovement += new Vector2(gamePadInput.ThumbSticks.Left.X, gamePadInput.ThumbSticks.Left.Y); CharacterController.HorizontalMotionConstraint.SpeedScale = Math.Min(totalMovement.Length(), 1); //Don't trust the game pad to output perfectly normalized values. CharacterController.HorizontalMotionConstraint.MovementDirection = totalMovement; CharacterController.StanceManager.DesiredStance = gamePadInput.IsButtonDown(Buttons.RightStick) ? Stance.Crouching : Stance.Standing; //Jumping if (previousGamePadInput.IsButtonUp(Buttons.LeftStick) && gamePadInput.IsButtonDown(Buttons.LeftStick)) { CharacterController.Jump(); } #else //Collect the movement impulses. if (keyboardInput.IsKeyDown(Keys.E)) { totalMovement += new Vector2(0, 1); } if (keyboardInput.IsKeyDown(Keys.D)) { totalMovement += new Vector2(0, -1); } if (keyboardInput.IsKeyDown(Keys.S)) { totalMovement += new Vector2(-1, 0); } if (keyboardInput.IsKeyDown(Keys.F)) { totalMovement += new Vector2(1, 0); } if (totalMovement == Vector2.Zero) { CharacterController.HorizontalMotionConstraint.MovementDirection = Vector2.Zero; } else { CharacterController.HorizontalMotionConstraint.MovementDirection = Vector2.Normalize(totalMovement); } //Jumping if (previousKeyboardInput.IsKeyUp(Keys.A) && keyboardInput.IsKeyDown(Keys.A)) { CharacterController.Jump(); } #endif CharacterController.ViewDirection = Camera.WorldMatrix.Forward; } }
public void Update(float dt, KeyboardState previousKeyboardInput, KeyboardState keyboardInput, GamePadState previousGamePadInput, GamePadState gamePadInput) { if (IsActive) { CameraControlScheme.Update(dt); Vector2 totalMovement = Vector2.Zero; if (keyboardInput.IsKeyDown(Keys.E)) { totalMovement += new Vector2(0, 1); } if (keyboardInput.IsKeyDown(Keys.D)) { totalMovement += new Vector2(0, -1); } if (keyboardInput.IsKeyDown(Keys.S)) { totalMovement += new Vector2(-1, 0); } if (keyboardInput.IsKeyDown(Keys.F)) { totalMovement += new Vector2(1, 0); } if (totalMovement == Vector2.Zero) { CharacterController.HorizontalMotionConstraint.MovementDirection = Vector2.Zero; } else { CharacterController.HorizontalMotionConstraint.MovementDirection = Vector2.Normalize(totalMovement); } if (keyboardInput.IsKeyDown(Keys.X)) { CharacterController.StanceManager.DesiredStance = Stance.Prone; } else if (keyboardInput.IsKeyDown(Keys.Z)) { CharacterController.StanceManager.DesiredStance = Stance.Crouching; } else { CharacterController.StanceManager.DesiredStance = Stance.Standing; } //Jumping if (previousKeyboardInput.IsKeyUp(Keys.A) && keyboardInput.IsKeyDown(Keys.A)) { CharacterController.Jump(); } CharacterController.ViewDirection = Camera.WorldMatrix.Forward; } }