Bugfix: program would crash when triggering an input entry flagged for removal
This commit is contained in:
parent
de2b2a56f0
commit
8f241032d2
1 changed files with 11 additions and 4 deletions
|
|
@ -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;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue