fix sdl3 motion

This commit is contained in:
madwind
2025-01-11 23:10:08 +08:00
parent 241b0152ad
commit f4e7482312
9 changed files with 100 additions and 128 deletions

View File

@@ -61,27 +61,27 @@ namespace Ryujinx.Input.SDL3
public GamepadFeaturesFlag Features { get; }
private nint _gamepadHandle;
private enum JoyConType
{
Left, Right
}
public const string Prefix = "Nintendo Switch Joy-Con";
public const string LeftName = "Nintendo Switch Joy-Con (L)";
public const string RightName = "Nintendo Switch Joy-Con (R)";
private readonly JoyConType _joyConType;
public SDL3JoyCon(nint gamepadHandle, string driverId)
public SDL3JoyCon(GamepadInfo gamepadInfo)
{
_gamepadHandle = gamepadHandle;
_gamepadHandle = gamepadInfo.gamepadHandle;
_buttonsUserMapping = new List<ButtonMappingEntry>(10);
Name = SDL_GetGamepadName(_gamepadHandle);
Id = driverId;
Id = gamepadInfo.driverId;
Features = GetFeaturesFlag();
Console.WriteLine(Name+": "+Features);
// Enable motion tracking
if (Features.HasFlag(GamepadFeaturesFlag.Motion))
{
@@ -118,7 +118,6 @@ namespace Ryujinx.Input.SDL3
private GamepadFeaturesFlag GetFeaturesFlag()
{
GamepadFeaturesFlag result = GamepadFeaturesFlag.None;
if (SDL_GamepadHasSensor(_gamepadHandle, SDL_SensorType.SDL_SENSOR_ACCEL) &&
SDL_GamepadHasSensor(_gamepadHandle, SDL_SensorType.SDL_SENSOR_GYRO))
{
@@ -141,8 +140,7 @@ namespace Ryujinx.Input.SDL3
{
if (disposing && _gamepadHandle != nint.Zero)
{
SDL_CloseGamepad(_gamepadHandle);
// SDL_CloseGamepad(_gamepadHandle);
_gamepadHandle = nint.Zero;
}
}
@@ -210,9 +208,7 @@ namespace Ryujinx.Input.SDL3
}
private static Vector3 RadToDegree(Vector3 rad) => rad * (180 / MathF.PI);
//TODO: miss constant SDL_STANDARD_GRAVITY 9.80665f
private static Vector3 GsToMs2(Vector3 gs) => gs / 9.80665f;
private static Vector3 GsToMs2(Vector3 gs) => gs / SDL_STANDARD_GRAVITY;
public void SetConfiguration(InputConfig configuration)
{
@@ -416,5 +412,11 @@ namespace Ryujinx.Input.SDL3
// }
return SDL_GetGamepadButton(_gamepadHandle, button);
}
public static bool IsJoyCon(IntPtr gamepadHandle)
{
var gamepadName = SDL_GetGamepadName(gamepadHandle);
return gamepadName is LeftName or RightName;
}
}
}