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 => {
if (oldKBState.IsKeyUp(key)){
if (keyPressListeners.TryGetValue(key, out var pressHandlers)){
List<KeyboardInputEntry> 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<KeyboardInputEntry> 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<KeyboardInputEntry> 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;