|
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 |
|
}; |
|
} |
|
} |
|
|