57 lines
No EOL
1.5 KiB
JavaScript
57 lines
No EOL
1.5 KiB
JavaScript
import { canvas, resize } from './state.js';
|
|
import { setupUI, handleInput } from './ui.js';
|
|
import { update } from './physics.js';
|
|
import { draw } from './renderer.js';
|
|
import { loadSettings, config } from './config.js';
|
|
|
|
function init() {
|
|
loadSettings();
|
|
resize();
|
|
window.addEventListener('resize', resize);
|
|
setupUI();
|
|
|
|
// Input Handling
|
|
let isMouseDown = false;
|
|
canvas.addEventListener('mousedown', (e) => {
|
|
isMouseDown = true;
|
|
handleInput(e);
|
|
});
|
|
canvas.addEventListener('mouseup', () => isMouseDown = false);
|
|
canvas.addEventListener('mousemove', (e) => {
|
|
if (isMouseDown) handleInput(e);
|
|
});
|
|
|
|
canvas.addEventListener('touchstart', (e) => {
|
|
isMouseDown = true;
|
|
handleInput(e);
|
|
e.preventDefault();
|
|
}, { passive: false });
|
|
canvas.addEventListener('touchend', (e) => {
|
|
if (e.touches.length === 0) isMouseDown = false;
|
|
});
|
|
canvas.addEventListener('touchmove', (e) => {
|
|
if (isMouseDown) handleInput(e);
|
|
e.preventDefault();
|
|
}, { passive: false });
|
|
|
|
gameLoop();
|
|
}
|
|
|
|
let updateAccumulator = 0;
|
|
function gameLoop() {
|
|
if (!config.time.paused) {
|
|
updateAccumulator += config.time.speed;
|
|
while (updateAccumulator >= 1) {
|
|
update();
|
|
updateAccumulator -= 1;
|
|
if (updateAccumulator > 50) {
|
|
updateAccumulator = 0;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
draw();
|
|
requestAnimationFrame(gameLoop);
|
|
}
|
|
|
|
init(); |