diff --git a/MonoGameLibrary/Input/InputManager.cs b/MonoGameLibrary/Input/InputManager.cs index d69c0a4..088a5c0 100644 --- a/MonoGameLibrary/Input/InputManager.cs +++ b/MonoGameLibrary/Input/InputManager.cs @@ -55,26 +55,30 @@ public static class InputManager { Array.ForEach(pressed, key => { if (oldKBState.IsKeyUp(key)){ if (keyPressListeners.TryGetValue(key, out var pressHandlers)){ + List toRemove = new(); pressHandlers.ForEach(t => { if (t.Enabled){ inputEventQueue.Enqueue(t.Action); } if (t.Hook.RemoveOnNextTrigger){ - pressHandlers.Remove(t); + toRemove.Add(t); } }); + pressHandlers.RemoveAll(toRemove.Contains); } } if (keyHoldListeners.TryGetValue(key, out var holdHandlers)){ + List toRemove = new(); holdHandlers.ForEach(t => { if (t.Enabled){ inputEventQueue.Enqueue(t.Action); } if (t.Hook.RemoveOnNextTrigger){ - holdHandlers.Remove(t); + toRemove.Add(t); } }); + holdHandlers.RemoveAll(toRemove.Contains); } }); @@ -84,15 +88,18 @@ public static class InputManager { } if (newKBState.IsKeyUp(key)){ - if (keyReleaseListeners.TryGetValue(key, out var releaseHandlers)) + if (keyReleaseListeners.TryGetValue(key, out var releaseHandlers)){ + List toRemove = new(); releaseHandlers.ForEach(t => { if (t.Enabled){ inputEventQueue.Enqueue(t.Action); } if (t.Hook.RemoveOnNextTrigger){ - releaseHandlers.Remove(t); + toRemove.Add(t); } }); + releaseHandlers.RemoveAll(toRemove.Contains); + } } }); oldKBState = newKBState;