2d-physics-engine
Version:
A lightweight, flexible 2D physics engine with ECS architecture, built with TypeScript
66 lines • 2.42 kB
JavaScript
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