Files
zombie-game/resources/js/engine/Input.js
T
2026-09-07 20:37:40 +02:00

56 lines
1.6 KiB
JavaScript

import { Vector2D } from './Vector2D.js';
export class Input {
constructor(canvas, viewport) {
this.keys = new Set();
this.pressed = new Set();
this.mouse = new Vector2D(viewport.width / 2, viewport.height / 2);
this.mouseDown = false;
this.mouseClicked = false;
window.addEventListener('keydown', (event) => {
this.keys.add(event.key.toLowerCase());
if (!event.repeat) {
this.pressed.add(event.key.toLowerCase());
}
if (event.key === ' ') {
event.preventDefault();
if (
document.activeElement &&
document.activeElement.tagName === 'BUTTON' &&
typeof document.activeElement.blur === 'function'
) {
document.activeElement.blur();
}
}
});
window.addEventListener('keyup', (event) => {
this.keys.delete(event.key.toLowerCase());
});
window.addEventListener('blur', () => {
this.keys.clear();
this.pressed.clear();
this.mouseDown = false;
});
canvas.addEventListener('mousemove', (event) => {
const rect = canvas.getBoundingClientRect();
this.mouse.x = ((event.clientX - rect.left) / rect.width) * viewport.width;
this.mouse.y = ((event.clientY - rect.top) / rect.height) * viewport.height;
});
canvas.addEventListener('mousedown', (event) => {
if (event.button === 0) {
this.mouseDown = true;
this.mouseClicked = true;
}
});
window.addEventListener('mouseup', () => {
this.mouseDown = false;
});
}
clearPressed() {
this.pressed.clear();
this.mouseClicked = false;
}
}