From 8f241032d24da10a497b5923f532641253c9b84c Mon Sep 17 00:00:00 2001 From: Perry Date: Mon, 16 Mar 2026 20:37:25 +0100 Subject: [PATCH] Bugfix: program would crash when triggering an input entry flagged for removal --- MonoGameLibrary/Input/InputManager.cs | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) 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;