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