File size: 1,547 Bytes
7ffaa9e |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
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
};
}
}
|