using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Input; namespace MLEM.Input { /// /// A set of extension methods for dealing with , and . /// public static class GamepadExtensions { /// /// Returns the given 's value as an analog value between 0 and 1, where 1 is fully down and 0 is not down at all. /// For non-analog buttons, like or , only 0 and 1 will be returned and no inbetween values are possible. /// /// The gamepad state to query. /// The button to query. /// The button's state as an analog value. public static float GetAnalogValue(this GamePadState state, Buttons button) { switch (button) { case Buttons.LeftThumbstickDown: return -MathHelper.Clamp(state.ThumbSticks.Left.Y, -1, 0); case Buttons.LeftThumbstickUp: return MathHelper.Clamp(state.ThumbSticks.Left.Y, 0, 1); case Buttons.LeftThumbstickLeft: return -MathHelper.Clamp(state.ThumbSticks.Left.X, -1, 0); case Buttons.LeftThumbstickRight: return MathHelper.Clamp(state.ThumbSticks.Left.X, 0, 1); case Buttons.RightTrigger: return state.Triggers.Right; case Buttons.LeftTrigger: return state.Triggers.Left; case Buttons.RightThumbstickDown: return -MathHelper.Clamp(state.ThumbSticks.Right.Y, -1, 0); case Buttons.RightThumbstickUp: return MathHelper.Clamp(state.ThumbSticks.Right.Y, 0, 1); case Buttons.RightThumbstickLeft: return -MathHelper.Clamp(state.ThumbSticks.Right.X, -1, 0); case Buttons.RightThumbstickRight: return MathHelper.Clamp(state.ThumbSticks.Right.X, 0, 1); default: return state.IsButtonDown(button) ? 1 : 0; } } } }