export class Handler { constructor() { this.enabled = true; this.boundLayer = null; } enable() { this.enabled = true; } disable() { this.enabled = false; } bind(layer) { this.boundLayer = layer; } canHandle() { return this.enabled && this.boundLayer && this.boundLayer.inputEnabled; } } export class LayerHandler extends Handler { constructor(eventType, handler) { super(); this.eventType = eventType; this.baseHandler = handler; } handle(event) { if (this.canHandle()) { this.baseHandler(event, this.boundLayer); } } } export class InputHandler extends Handler { constructor(canvas) { super(); this.canvas = canvas; this.handlers = new Map(); } addHandler(eventType, handler) { if (!this.handlers.has(eventType)) { this.handlers.set(eventType, []); } this.handlers.get(eventType).push(handler); } removeHandler(eventType, handler) { if (this.handlers.has(eventType)) { const handlers = this.handlers.get(eventType); const index = handlers.indexOf(handler); if (index !== -1) { handlers.splice(index, 1); } } } getMousePosition(event) { const rect = this.canvas.getBoundingClientRect(); return { x: event.clientX - rect.left, y: event.clientY - rect.top }; } }