/** * 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); }; }