Skip to content

Commit

Permalink
_indicesMap in ConcreteJoystick
Browse files Browse the repository at this point in the history
  • Loading branch information
nkast committed May 29, 2024
1 parent 0e5192c commit f30c3e0
Showing 1 changed file with 12 additions and 6 deletions.
18 changes: 12 additions & 6 deletions MonoGame.Framework/Input/.SDL2/ConcreteJoystick.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@ public sealed class ConcreteJoystick : JoystickStrategy

// map Joystick indices (PlayerIndex) -> JoystickDevices
private Dictionary<int, SdlJoystickDevice> _sdlJoysticks = new Dictionary<int, SdlJoystickDevice>();
// map Joystick instanceIDs -> gamepad indices (PlayerIndex)
private readonly Dictionary<int, int> _indicesMap = new Dictionary<int, int>();

private int _maxConnectedIndex = -1;

public override bool PlatformIsSupported
Expand All @@ -39,6 +42,7 @@ public ConcreteJoystick()
SDL.JOYSTICK.Close(sdlJoystick.Handle);

_sdlJoysticks.Clear();
_indicesMap.Clear();
}

public override JoystickCapabilities PlatformGetCapabilities(int index)
Expand Down Expand Up @@ -160,23 +164,25 @@ internal void AddDevice(int deviceIndex)

_sdlJoysticks.Add(index, sdlJoystick);

_indicesMap[instanceID] = index;

if (sdlJoystick.Capabilities.IsGamepad)
((IPlatformGamePad)GamePad.Current).GetStrategy<ConcreteGamePad>().AddDevice(deviceIndex);
}

internal void RemoveDevice(int instanceID)
{
foreach (KeyValuePair<int, SdlJoystickDevice> item in _sdlJoysticks)
if (_indicesMap.TryGetValue(instanceID, out int index))
{
if (SDL.JOYSTICK.InstanceID(item.Value.Handle) == instanceID)
if (_sdlJoysticks.TryGetValue(index, out SdlJoystickDevice sdlJoystick))
{
SDL.JOYSTICK.Close(item.Value.Handle);
_sdlJoysticks.Remove(item.Key);
SDL.JOYSTICK.Close(sdlJoystick.Handle);
_sdlJoysticks.Remove(index);

if (_maxConnectedIndex == item.Key)
if (_maxConnectedIndex == index)
_maxConnectedIndex = CalculateMaxConnectedIndex();

break;
_indicesMap.Remove(instanceID);
}
}
}
Expand Down

0 comments on commit f30c3e0

Please sign in to comment.