/// <summary> /// Handles the input and movement of the character. /// </summary> /// <param name="dt">Time since last frame in simulation seconds.</param> /// <param name="keyboardInput">Keyboard state.</param> /// <param name="gamePadInput">Gamepad state.</param> public void Update(float dt, Microsoft.Xna.Framework.Input.KeyboardState keyboardInput, Microsoft.Xna.Framework.Input.GamePadState gamePadInput) { //Update the wheel's graphics. for (int k = 0; k < 4; k++) { WheelModels[k].WorldTransform = Vehicle.Wheels[k].Shape.WorldTransform; } if (IsActive) { CameraControlScheme.Update(dt); #if XBOX360 float speed = gamePadInput.Triggers.Right * ForwardSpeed + gamePadInput.Triggers.Left * BackwardSpeed; Vehicle.Wheels[1].DrivingMotor.TargetSpeed = speed; Vehicle.Wheels[3].DrivingMotor.TargetSpeed = speed; if (gamePadInput.IsButtonDown(Buttons.LeftStick)) { foreach (Wheel wheel in Vehicle.Wheels) { wheel.Brake.IsBraking = true; } } else { foreach (Wheel wheel in Vehicle.Wheels) { wheel.Brake.IsBraking = false; } } Vehicle.Wheels[1].Shape.SteeringAngle = (gamePadInput.ThumbSticks.Left.X * MaximumTurnAngle); Vehicle.Wheels[3].Shape.SteeringAngle = (gamePadInput.ThumbSticks.Left.X * MaximumTurnAngle); #else if (keyboardInput.IsKeyDown(Microsoft.Xna.Framework.Input.Keys.E)) { //Drive Vehicle.Wheels[1].DrivingMotor.TargetSpeed = ForwardSpeed; Vehicle.Wheels[3].DrivingMotor.TargetSpeed = ForwardSpeed; } else if (keyboardInput.IsKeyDown(Microsoft.Xna.Framework.Input.Keys.D)) { //Reverse Vehicle.Wheels[1].DrivingMotor.TargetSpeed = BackwardSpeed; Vehicle.Wheels[3].DrivingMotor.TargetSpeed = BackwardSpeed; } else { //Idle Vehicle.Wheels[1].DrivingMotor.TargetSpeed = 0; Vehicle.Wheels[3].DrivingMotor.TargetSpeed = 0; } if (keyboardInput.IsKeyDown(Microsoft.Xna.Framework.Input.Keys.Space)) { //Brake foreach (Wheel wheel in Vehicle.Wheels) { wheel.Brake.IsBraking = true; } } else { //Release brake foreach (Wheel wheel in Vehicle.Wheels) { wheel.Brake.IsBraking = false; } } //Use smooth steering; while held down, move towards maximum. //When not pressing any buttons, smoothly return to facing forward. float angle; bool steered = false; if (keyboardInput.IsKeyDown(Microsoft.Xna.Framework.Input.Keys.S)) { steered = true; angle = Math.Max(Vehicle.Wheels[1].Shape.SteeringAngle - TurnSpeed * dt, -MaximumTurnAngle); Vehicle.Wheels[1].Shape.SteeringAngle = angle; Vehicle.Wheels[3].Shape.SteeringAngle = angle; } if (keyboardInput.IsKeyDown(Microsoft.Xna.Framework.Input.Keys.F)) { steered = true; angle = Math.Min(Vehicle.Wheels[1].Shape.SteeringAngle + TurnSpeed * dt, MaximumTurnAngle); Vehicle.Wheels[1].Shape.SteeringAngle = angle; Vehicle.Wheels[3].Shape.SteeringAngle = angle; } if (!steered) { //Neither key was pressed, so de-steer. if (Vehicle.Wheels[1].Shape.SteeringAngle > 0) { angle = Math.Max(Vehicle.Wheels[1].Shape.SteeringAngle - TurnSpeed * dt, 0); Vehicle.Wheels[1].Shape.SteeringAngle = angle; Vehicle.Wheels[3].Shape.SteeringAngle = angle; } else { angle = Math.Min(Vehicle.Wheels[1].Shape.SteeringAngle + TurnSpeed * dt, 0); Vehicle.Wheels[1].Shape.SteeringAngle = angle; Vehicle.Wheels[3].Shape.SteeringAngle = angle; } } #endif } else { //Parking brake foreach (Wheel wheel in Vehicle.Wheels) { wheel.Brake.IsBraking = true; } //Don't want the car to keep trying to drive. Vehicle.Wheels[1].DrivingMotor.TargetSpeed = 0; Vehicle.Wheels[3].DrivingMotor.TargetSpeed = 0; } }
/// <summary> /// Draws the background screen. /// </summary> public override void Draw(GameTime gameTime) { SpriteBatch spriteBatch = ScreenManager.SpriteBatch; Viewport viewport = ScreenManager.GraphicsDevice.Viewport; Rectangle fullscreen = new Rectangle(0, 0, viewport.Width, viewport.Height); byte fade = TransitionAlpha; spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend); spriteBatch.Draw(backgroundTexture, fullscreen, new Color(fade, fade, fade)); try { if (ScreenManager.GetScreens().Length <= 2) { for (int i = 0; i < Gamer.SignedInGamers.Count; i++) { Gamer.SignedInGamers[i].Presence.PresenceMode = GamerPresenceMode.AtMenu; } //menu screen updates should go right under this! //and drawing code too!! wow 2 in 1! // } // #if WINDOWS spriteBatch.DrawString(ScreenManager.Font, "v" + Global_Variables.version, new Vector2(1210, 690), Color.White, 0, Vector2.Zero, .6f, SpriteEffects.None, 0); #region Old entering code if (Guide.IsTrialMode == false) { Microsoft.Xna.Framework.Input.GamePadState gamepad1 = Microsoft.Xna.Framework.Input.GamePad.GetState(PlayerIndex.One); Microsoft.Xna.Framework.Input.GamePadState gamepad2 = Microsoft.Xna.Framework.Input.GamePad.GetState(PlayerIndex.Two); Microsoft.Xna.Framework.Input.GamePadState gamepad3 = Microsoft.Xna.Framework.Input.GamePad.GetState(PlayerIndex.Three); Microsoft.Xna.Framework.Input.GamePadState gamepad4 = Microsoft.Xna.Framework.Input.GamePad.GetState(PlayerIndex.Four); int numberplayersconnected = 0; if (gamepad1.IsConnected) { numberplayersconnected++; } if (gamepad2.IsConnected) { numberplayersconnected++; } if (gamepad3.IsConnected) { numberplayersconnected++; } if (gamepad4.IsConnected) { numberplayersconnected++; } if (numberplayersconnected > 1) { if (gamepad1.IsConnected && player1isplaying == false) { spriteBatch.DrawString(ScreenManager.Font , "\n\rPlayer 1: Press X To Enter!", new Vector2(Convert.ToInt32(ScreenManager.GraphicsDevice.Viewport.Width * .6) , ScreenManager.GraphicsDevice.Viewport.TitleSafeArea.Y + 5 ), Color.LightGreen); } else if (gamepad1.IsConnected && player1isplaying) { spriteBatch.DrawString(ScreenManager.Font , "\n\rPlayer 1: Press Y To Leave!", new Vector2(Convert.ToInt32(ScreenManager.GraphicsDevice.Viewport.Width * .6) , ScreenManager.GraphicsDevice.Viewport.TitleSafeArea.Y + 5 ), Color.LightGreen); } if (gamepad2.IsConnected && player2isplaying == false) { spriteBatch.DrawString(ScreenManager.Font , "\n\r\n\rPlayer 2: Press X To Enter!", new Vector2(Convert.ToInt32(ScreenManager.GraphicsDevice.Viewport.Width * .6) , ScreenManager.GraphicsDevice.Viewport.TitleSafeArea.Y + 5 ), Color.LightBlue); } else if (gamepad2.IsConnected && player2isplaying) { spriteBatch.DrawString(ScreenManager.Font , "\n\r\n\rPlayer 2: Press Y To Leave!", new Vector2(Convert.ToInt32(ScreenManager.GraphicsDevice.Viewport.Width * .6) , ScreenManager.GraphicsDevice.Viewport.TitleSafeArea.Y + 5 ), Color.LightBlue); } if (gamepad3.IsConnected && player3isplaying == false) { spriteBatch.DrawString(ScreenManager.Font , "\n\r\n\r\n\rPlayer 3: Press X To Enter!", new Vector2(Convert.ToInt32(ScreenManager.GraphicsDevice.Viewport.Width * .6) , ScreenManager.GraphicsDevice.Viewport.TitleSafeArea.Y + 5 ), Color.Yellow); } else if (gamepad3.IsConnected && player3isplaying) { spriteBatch.DrawString(ScreenManager.Font , "\n\r\n\r\n\rPlayer 3: Press Y To Leave!", new Vector2(Convert.ToInt32(ScreenManager.GraphicsDevice.Viewport.Width * .6) , ScreenManager.GraphicsDevice.Viewport.TitleSafeArea.Y + 5 ), Color.Yellow); } if (gamepad4.IsConnected && player4isplaying == false) { spriteBatch.DrawString(ScreenManager.Font , "\n\r\n\r\n\r\n\rPlayer 4: Press X To Enter!", new Vector2(Convert.ToInt32(ScreenManager.GraphicsDevice.Viewport.Width * .6) , ScreenManager.GraphicsDevice.Viewport.TitleSafeArea.Y + 5 ), Color.Purple); } else if (gamepad4.IsConnected && player4isplaying) { spriteBatch.DrawString(ScreenManager.Font , "\n\r\n\r\n\r\n\rPlayer 4: Press Y To Leave!", new Vector2(Convert.ToInt32(ScreenManager.GraphicsDevice.Viewport.Width * .6) , ScreenManager.GraphicsDevice.Viewport.TitleSafeArea.Y + 5 ), Color.White); } if (gamepad1.IsButtonDown(Microsoft.Xna.Framework.Input.Buttons.X)) { player1isplaying = true; } if (gamepad2.IsButtonDown(Microsoft.Xna.Framework.Input.Buttons.X)) { player2isplaying = true; } if (gamepad3.IsButtonDown(Microsoft.Xna.Framework.Input.Buttons.X)) { player3isplaying = true; } if (gamepad4.IsButtonDown(Microsoft.Xna.Framework.Input.Buttons.X)) { player4isplaying = true; } if (gamepad1.IsButtonDown(Microsoft.Xna.Framework.Input.Buttons.Y)) { player1isplaying = false; } if (gamepad2.IsButtonDown(Microsoft.Xna.Framework.Input.Buttons.Y)) { player2isplaying = false; } if (gamepad3.IsButtonDown(Microsoft.Xna.Framework.Input.Buttons.Y)) { player3isplaying = false; } if (gamepad4.IsButtonDown(Microsoft.Xna.Framework.Input.Buttons.Y)) { player4isplaying = false; } } } #endregion #endif } catch { } spriteBatch.End(); }