UNPKG

2d-physics-engine

Version:

A lightweight, flexible 2D physics engine with ECS architecture, built with TypeScript

66 lines 2.42 kB
import { Vector2 } from '../math/Vector2'; export class InputManager { constructor() { Object.defineProperty(this, "keyStates", { enumerable: true, configurable: true, writable: true, value: new Map() }); Object.defineProperty(this, "mousePosition", { enumerable: true, configurable: true, writable: true, value: new Vector2() }); Object.defineProperty(this, "mouseButtons", { enumerable: true, configurable: true, writable: true, value: new Map() }); // Set up event listeners window.addEventListener('keydown', this.handleKeyDown.bind(this)); window.addEventListener('keyup', this.handleKeyUp.bind(this)); window.addEventListener('mousemove', this.handleMouseMove.bind(this)); window.addEventListener('mousedown', this.handleMouseDown.bind(this)); window.addEventListener('mouseup', this.handleMouseUp.bind(this)); } update() { // Update wasPressed states this.keyStates.forEach((state) => (state.wasPressed = state.isPressed)); this.mouseButtons.forEach((state) => (state.wasPressed = state.isPressed)); } isKeyPressed(key) { return this.keyStates.get(key)?.isPressed || false; } isKeyJustPressed(key) { const state = this.keyStates.get(key); return state ? state.isPressed && !state.wasPressed : false; } isMouseButtonPressed(button) { return this.mouseButtons.get(button)?.isPressed || false; } isMouseButtonJustPressed(button) { return this.mouseButtons.get(button)?.wasPressed || false; } getMousePosition() { return this.mousePosition; } handleKeyDown(event) { this.keyStates.set(event.key, { isPressed: true, wasPressed: false }); } handleKeyUp(event) { this.keyStates.set(event.key, { isPressed: false, wasPressed: true }); } handleMouseMove(event) { this.mousePosition = new Vector2(event.clientX, event.clientY); } handleMouseDown(event) { this.mouseButtons.set(event.button, { isPressed: true, wasPressed: false }); } handleMouseUp(event) { this.mouseButtons.set(event.button, { isPressed: false, wasPressed: true }); } } //# sourceMappingURL=InputManager.js.map