Show More
Commit Description:
Various UI improvements.
Commit Description:
Various UI improvements.
References:
File last commit:
Show/Diff file:
Action:
FNA/src/Input/GamePad.cs
126 lines | 2.7 KiB | text/x-csharp | CSharpLexer
126 lines | 2.7 KiB | text/x-csharp | CSharpLexer
r0 | #region License | |||
/* FNA - XNA4 Reimplementation for Desktop Platforms | ||||
* Copyright 2009-2020 Ethan Lee and the MonoGame Team | ||||
* | ||||
* Released under the Microsoft Public License. | ||||
* See LICENSE for details. | ||||
*/ | ||||
#endregion | ||||
#region Using Statements | ||||
using System; | ||||
#endregion | ||||
namespace Microsoft.Xna.Framework.Input | ||||
{ | ||||
public static class GamePad | ||||
{ | ||||
#region Internal Constants | ||||
/* Based on the XInput constants */ | ||||
internal const float LeftDeadZone = 7849.0f / 32768.0f; | ||||
internal const float RightDeadZone = 8689.0f / 32768.0f; | ||||
internal const float TriggerThreshold = 30.0f / 255.0f; | ||||
#endregion | ||||
#region Internal Static Variables | ||||
/* Determines how many controllers we should be tracking. | ||||
* Per XNA4 we track 4 by default, but if you want to track more you can | ||||
* do this by changing PlayerIndex.cs to include more index names. | ||||
* -flibit | ||||
*/ | ||||
internal static readonly int GAMEPAD_COUNT = DetermineNumGamepads(); | ||||
private static int DetermineNumGamepads() | ||||
{ | ||||
string numGamepadString = Environment.GetEnvironmentVariable( | ||||
"FNA_GAMEPAD_NUM_GAMEPADS" | ||||
); | ||||
if (!String.IsNullOrEmpty(numGamepadString)) | ||||
{ | ||||
int numGamepads; | ||||
if (int.TryParse(numGamepadString, out numGamepads)) | ||||
{ | ||||
if (numGamepads >= 0) | ||||
{ | ||||
return numGamepads; | ||||
} | ||||
} | ||||
} | ||||
return Enum.GetNames(typeof(PlayerIndex)).Length; | ||||
} | ||||
#endregion | ||||
#region Public GamePad API | ||||
public static GamePadCapabilities GetCapabilities(PlayerIndex playerIndex) | ||||
{ | ||||
return FNAPlatform.GetGamePadCapabilities((int) playerIndex); | ||||
} | ||||
public static GamePadState GetState(PlayerIndex playerIndex) | ||||
{ | ||||
return FNAPlatform.GetGamePadState( | ||||
(int) playerIndex, | ||||
GamePadDeadZone.IndependentAxes | ||||
); | ||||
} | ||||
public static GamePadState GetState(PlayerIndex playerIndex, GamePadDeadZone deadZoneMode) | ||||
{ | ||||
return FNAPlatform.GetGamePadState( | ||||
(int) playerIndex, | ||||
deadZoneMode | ||||
); | ||||
} | ||||
public static bool SetVibration(PlayerIndex playerIndex, float leftMotor, float rightMotor) | ||||
{ | ||||
return FNAPlatform.SetGamePadVibration( | ||||
(int) playerIndex, | ||||
leftMotor, | ||||
rightMotor | ||||
); | ||||
} | ||||
#endregion | ||||
#region Public GamePad API, FNA Extensions | ||||
public static string GetGUIDEXT(PlayerIndex playerIndex) | ||||
{ | ||||
return FNAPlatform.GetGamePadGUID((int) playerIndex); | ||||
} | ||||
public static void SetLightBarEXT(PlayerIndex playerIndex, Color color) | ||||
{ | ||||
FNAPlatform.SetGamePadLightBar((int) playerIndex, color); | ||||
} | ||||
#endregion | ||||
#region Internal Static Methods | ||||
internal static float ExcludeAxisDeadZone(float value, float deadZone) | ||||
{ | ||||
if (value < -deadZone) | ||||
{ | ||||
value += deadZone; | ||||
} | ||||
else if (value > deadZone) | ||||
{ | ||||
value -= deadZone; | ||||
} | ||||
else | ||||
{ | ||||
return 0.0f; | ||||
} | ||||
return value / (1.0f - deadZone); | ||||
} | ||||
#endregion | ||||
} | ||||
} | ||||