fix controller hot swapping

pull/48/head
cosmonaut 2023-04-05 16:52:36 -07:00
parent 3584e670ee
commit e3c2f0e119
2 changed files with 16 additions and 2 deletions

View File

@ -195,6 +195,20 @@ namespace MoonWorks.Input
}; };
} }
public void Register(IntPtr handle)
{
Handle = handle;
IntPtr joystickHandle = SDL.SDL_GameControllerGetJoystick(Handle);
JoystickInstanceID = SDL.SDL_JoystickInstanceID(joystickHandle);
}
public void Unregister()
{
Handle = IntPtr.Zero;
JoystickInstanceID = -1;
}
internal void Update() internal void Update()
{ {
AnyPressed = false; AnyPressed = false;

View File

@ -95,7 +95,7 @@ namespace MoonWorks.Input
} }
else else
{ {
gamepads[slot].Handle = openResult; gamepads[slot].Register(openResult);
System.Console.WriteLine($"Gamepad added to slot {slot}!"); System.Console.WriteLine($"Gamepad added to slot {slot}!");
} }
return; return;
@ -112,7 +112,7 @@ namespace MoonWorks.Input
if (joystickInstanceID == gamepads[slot].JoystickInstanceID) if (joystickInstanceID == gamepads[slot].JoystickInstanceID)
{ {
SDL.SDL_GameControllerClose(gamepads[slot].Handle); SDL.SDL_GameControllerClose(gamepads[slot].Handle);
gamepads[slot].Handle = IntPtr.Zero; gamepads[slot].Unregister();
System.Console.WriteLine($"Removing gamepad from slot {slot}!"); System.Console.WriteLine($"Removing gamepad from slot {slot}!");
return; return;
} }