From 39cac21741d100992cb74eec0d6a7d38d8239f09 Mon Sep 17 00:00:00 2001 From: Jake Date: Sun, 30 Mar 2025 00:02:46 +0800 Subject: [PATCH] reimplemented sensor data pushes, need to update to new sensor paradigm. Added 30fps frame lock --- game.js | 52 +++++++++++++++++++++++++++++++++++++---------- pyodide-worker.js | 6 +++++- 2 files changed, 46 insertions(+), 12 deletions(-) diff --git a/game.js b/game.js index 7d54a38..845c8fe 100644 --- a/game.js +++ b/game.js @@ -105,21 +105,35 @@ function resetGame() { document.getElementById("pause-button").innerText = "Pause"; } +const targetFPS = 30; +const targetInterval = 1000 / targetFPS; // Time in milliseconds per frame +let lastFrameTime = 0; + // ✅ Game Loop -function gameLoop() { - if (!paused) { - ctx.resetTransform(); - // Fill the entire visible canvas to remove artifacts - ctx.fillStyle = "#DDD"; - ctx.fillRect(0, 0, gameCanvas.width, gameCanvas.height); +function gameLoop(timestamp) { + const deltaTime = timestamp - lastFrameTime; + // If enough time has passed since the last frame, update and draw + if (deltaTime >= targetInterval) { + lastFrameTime = timestamp; + if (!paused) { + ctx.resetTransform(); + // Fill the entire visible canvas to remove artifacts + ctx.fillStyle = "#DDD"; + ctx.fillRect(0, 0, gameCanvas.width, gameCanvas.height); - ctx.translate(offsetX, offsetY); // Apply panning - ctx.scale(scale, scale); // Apply zooming + ctx.translate(offsetX, offsetY); // Apply panning + ctx.scale(scale, scale); // Apply zooming - gameWorld.update(); - gameWorld.draw(ctx); + gameWorld.update(); + gameWorld.draw(ctx); - + pyodideWorker.postMessage({ + type: "game_state", + state: gameWorld + }); + + + } } requestAnimationFrame(gameLoop); } @@ -128,6 +142,22 @@ resetGame(); // Initialize the game and robots // Start game loop gameLoop(); +// ✅ Update "distance" and "speed" every 2 seconds with random values +function updateSensorData() { + const distance = Math.random() * 100; // Random distance (0-100) + const speed = Math.random() * 10; // Random speed (0-10) + console.log(`Distance: ${distance.toFixed(2)}, Speed: ${speed.toFixed(2)}`); + pyodideWorker.postMessage({ + type: "sensor_update", + data: { distance, speed } + }); + + //logToConsole(`📡 Sensor Update - Distance: ${distance.toFixed(2)}, Speed: ${speed.toFixed(2)}`); +} + +setInterval(updateSensorData, 2000); // Call every 2 seconds + + // ✅ Button Event Listeners document.getElementById("compile-button").addEventListener("click", () => { if (paused) return; diff --git a/pyodide-worker.js b/pyodide-worker.js index be00981..e937564 100644 --- a/pyodide-worker.js +++ b/pyodide-worker.js @@ -65,16 +65,20 @@ time.sleep = async_sleep # ✅ Monkey-patch time.sleep() } initializePyodide(); +self.postMessage({ type: "console", message: ":-(" }); self.onmessage = async (event) => { if (!self.pyodide) { self.postMessage({ type: "error", message: "Pyodide not initialized yet." }); return; } - + if (event.data.type === "sensor_update") { // ✅ Update sensor data Object.assign(sensorData, event.data.data); + } else if (event.data.type === "game_state") { + console.log("Game state updated in"); + } else if (event.data.type === "execute") { try { let result = await self.pyodide.runPythonAsync(event.data.code);