Category5.Tornado.UpdatePosition C# (CSharp) Method

UpdatePosition() private method

private UpdatePosition ( float elapsedMilliseconds ) : void
elapsedMilliseconds float
return void
        private void UpdatePosition(float elapsedMilliseconds)
        {
            float accelFactor = (0.0007f * (float)RotationalSpeed) + (0.00001f * (float)Math.Sqrt(TotalMass));

            // zero acceleration
            Acceleration.X = 0f;
            Acceleration.Y = 0f;

            if (Input.KeyboardState[Microsoft.Xna.Framework.Input.Keys.Left] == Microsoft.Xna.Framework.Input.KeyState.Down
                || Input.KeyboardState[Microsoft.Xna.Framework.Input.Keys.A] == Microsoft.Xna.Framework.Input.KeyState.Down)
            {
                Acceleration.X = Acceleration.X - accelFactor;
            }
            if (Input.KeyboardState[Microsoft.Xna.Framework.Input.Keys.Right] == Microsoft.Xna.Framework.Input.KeyState.Down
                || Input.KeyboardState[Microsoft.Xna.Framework.Input.Keys.D] == Microsoft.Xna.Framework.Input.KeyState.Down)
            {
                Acceleration.X = Acceleration.X + accelFactor;
            }
            if (Input.KeyboardState[Microsoft.Xna.Framework.Input.Keys.Up] == Microsoft.Xna.Framework.Input.KeyState.Down
                || Input.KeyboardState[Microsoft.Xna.Framework.Input.Keys.W] == Microsoft.Xna.Framework.Input.KeyState.Down)
            {
                Acceleration.Y = Acceleration.Y - accelFactor;
            }
            if (Input.KeyboardState[Microsoft.Xna.Framework.Input.Keys.Down] == Microsoft.Xna.Framework.Input.KeyState.Down
                || Input.KeyboardState[Microsoft.Xna.Framework.Input.Keys.S] == Microsoft.Xna.Framework.Input.KeyState.Down)
            {
                Acceleration.Y = Acceleration.Y + accelFactor;
            }

            //Check for control from game pad
            if (Input.GamePadConnected)
            {
                Acceleration.X = Acceleration.X + Input.GamePadState.ThumbSticks.Left.X * accelFactor;
                Acceleration.Y = Acceleration.Y - Input.GamePadState.ThumbSticks.Left.Y * accelFactor;
            }

            // keep acceleration to max
            float maxAccel = 1f;
            if (Acceleration.Length() > maxAccel)
            {
                Acceleration.Normalize();
                Acceleration = Acceleration * maxAccel;
            }

            // decelerate
            float decelFactor = 0.05f;
            Vector2 decel = Velocity * decelFactor * elapsedMilliseconds;
            if (decel.Length() > Velocity.Length())
            {
                Velocity.X = 0f;
                Velocity.Y = 0f;
            }
            else
            {
                Velocity = Velocity - decel;
            }

            // accelerate
            Velocity = Velocity + Acceleration * elapsedMilliseconds;

            // limit maximum velocity
            float maxVelocity = 100f;
            if (Velocity.Length() > maxVelocity)
            {
                Velocity.Normalize();
                Velocity = Velocity * maxVelocity;
            }

            // move
            Position = Position + Velocity * elapsedMilliseconds;

            // keep in bounds
            if (Position.X < 0f)
                Position.X = 0f;
            if (Position.X > (float)ParentLevel.levelWidthSize())
                Position.X = (float)ParentLevel.levelWidthSize();
            if (Position.Y < 0f)
                Position.Y = 0f;
            if (Position.Y > (float)ParentLevel.levelHeightSize())
                Position.Y = (float)ParentLevel.levelHeightSize();
        }