69 lines
1.4 KiB
JavaScript
69 lines
1.4 KiB
JavaScript
|
|
export * as canvas from "./lib/canvas.js"
|
|
export * as texture from "./lib/texture.js"
|
|
|
|
export let frameDeltaT = 0;
|
|
|
|
/**
|
|
* Start a game.
|
|
*
|
|
* @param {() => void} initFunction Run once at start
|
|
* @param {() => void} loopFunction Run every frame
|
|
*/
|
|
export function startGame(loopFunction) {
|
|
let before = Date.now();
|
|
setInterval(() => {
|
|
const now = Date.now();
|
|
frameDeltaT = (now - before) / 1000;
|
|
before = now;
|
|
|
|
loopFunction();
|
|
}, 16);
|
|
}
|
|
|
|
const keysPressed = new Set();
|
|
const keyPressHandlers = new Map();
|
|
const keyReleaseHandlers = new Map();
|
|
|
|
document.body.addEventListener("keydown", (ev) => {
|
|
keysPressed.add(ev.key);
|
|
keyPressHandlers.get(ev.key)?.();
|
|
});
|
|
|
|
document.body.addEventListener("keyup", (ev) => {
|
|
keysPressed.delete(ev.key);
|
|
keyReleaseHandlers.get(ev.key)?.();
|
|
});
|
|
|
|
/**
|
|
* If a key is currently being pressed.
|
|
* @param {string} key
|
|
* @returns {boolean}
|
|
*/
|
|
export function isPressed(key) {
|
|
return keysPressed.has(key);
|
|
}
|
|
|
|
/**
|
|
* When a key is pressed (key down).
|
|
* @param {string} key
|
|
* @param {() => void} handlerFunction
|
|
*/
|
|
export function onPress(key, handlerFunction) {
|
|
keyPressHandlers.set(key, handlerFunction);
|
|
}
|
|
|
|
/**
|
|
* When a key is released (key up).
|
|
* @param {string} key
|
|
* @param {() => void} handlerFunction
|
|
*/
|
|
export function onRelease(key, handlerFunction) {
|
|
keyReleaseHandlers.set(key, handlerFunction);
|
|
}
|
|
|
|
|
|
|
|
|
|
|