smolworld / src /js /handler.js
p3nGu1nZz's picture
✨ Refactor physics module; add math utilities and event handling classes; update state structure for 3D entities
7ffaa9e
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
};
}
}