Files
2026-09-24 17:57:54 +02:00

31 lines
1.1 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* Hilfen für Phaser-Tastaturereignisse.
* @module systems/keyboard
*/
/**
* Lässt jedes KeyboardEvent nur einmal zum Handler durch.
*
* Warum: Phaser 3.90 verarbeitet bei jedem neuen DOM-Tastaturereignis die gesamte
* Warteschlange des aktuellen Frames erneut und leert sie erst am Frame-Ende. Treffen
* drei oder mehr Tastenereignisse innerhalb eines Frames ein (schnelles Tippen, oder
* die automatische Wiederholung der gehaltenen Q-Taste während einer Befehlseingabe),
* meldet Phaser dasselbe `keydown` mehrfach. Für Orbital-Befehle hieße das: Aus
* „↓“ wird „↓ ↓“ und die Eingabe schlägt fehl. Das Ereignisobjekt selbst ist dabei
* identisch – daran erkennen wir Wiederholungen zuverlässig.
*
* @template {KeyboardEvent} E
* @param {(event: E) => void} handler
* @returns {(event: E) => void}
*/
export function oncePerEvent(handler) {
const seen = new WeakSet();
return (event) => {
if (event && typeof event === 'object') {
if (seen.has(event)) return;
seen.add(event);
}
handler(event);
};
}