export class EventEmitter { | |
constructor() { | |
this.listeners = new Map(); | |
} | |
on(event, callback) { | |
if (!this.listeners.has(event)) { | |
this.listeners.set(event, new Set()); | |
} | |
this.listeners.get(event).add(callback); | |
} | |
off(event, callback) { | |
if (this.listeners.has(event)) { | |
this.listeners.get(event).delete(callback); | |
} | |
} | |
emit(event, ...args) { | |
if (this.listeners.has(event)) { | |
this.listeners.get(event).forEach(callback => callback(...args)); | |
} | |
} | |
clear() { | |
this.listeners.clear(); | |
} | |
} | |
export const EventTypes = { | |
KEY_DOWN: 'keydown', | |
KEY_UP: 'keyup', | |
KEY_PRESS: 'keypress', | |
MOUSE_MOVE: 'mousemove', | |
MOUSE_DOWN: 'mousedown', | |
MOUSE_UP: 'mouseup', | |
MOUSE_WHEEL: 'wheel', | |
CLICK: 'click' | |
}; | |