Bugfix: program would crash when triggering an input entry flagged for removal

This commit is contained in:
Perry 2026-03-16 20:37:25 +01:00
parent de2b2a56f0
commit 8f241032d2

View file

@ -55,26 +55,30 @@ public static class InputManager {
Array.ForEach(pressed, key => { Array.ForEach(pressed, key => {
if (oldKBState.IsKeyUp(key)){ if (oldKBState.IsKeyUp(key)){
if (keyPressListeners.TryGetValue(key, out var pressHandlers)){ if (keyPressListeners.TryGetValue(key, out var pressHandlers)){
List<KeyboardInputEntry> toRemove = new();
pressHandlers.ForEach(t => { pressHandlers.ForEach(t => {
if (t.Enabled){ if (t.Enabled){
inputEventQueue.Enqueue(t.Action); inputEventQueue.Enqueue(t.Action);
} }
if (t.Hook.RemoveOnNextTrigger){ if (t.Hook.RemoveOnNextTrigger){
pressHandlers.Remove(t); toRemove.Add(t);
} }
}); });
pressHandlers.RemoveAll(toRemove.Contains);
} }
} }
if (keyHoldListeners.TryGetValue(key, out var holdHandlers)){ if (keyHoldListeners.TryGetValue(key, out var holdHandlers)){
List<KeyboardInputEntry> toRemove = new();
holdHandlers.ForEach(t => { holdHandlers.ForEach(t => {
if (t.Enabled){ if (t.Enabled){
inputEventQueue.Enqueue(t.Action); inputEventQueue.Enqueue(t.Action);
} }
if (t.Hook.RemoveOnNextTrigger){ 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 (newKBState.IsKeyUp(key)){
if (keyReleaseListeners.TryGetValue(key, out var releaseHandlers)) if (keyReleaseListeners.TryGetValue(key, out var releaseHandlers)){
List<KeyboardInputEntry> toRemove = new();
releaseHandlers.ForEach(t => { releaseHandlers.ForEach(t => {
if (t.Enabled){ if (t.Enabled){
inputEventQueue.Enqueue(t.Action); inputEventQueue.Enqueue(t.Action);
} }
if (t.Hook.RemoveOnNextTrigger){ if (t.Hook.RemoveOnNextTrigger){
releaseHandlers.Remove(t); toRemove.Add(t);
} }
}); });
releaseHandlers.RemoveAll(toRemove.Contains);
}
} }
}); });
oldKBState = newKBState; oldKBState = newKBState;