reimplemented sensor data pushes, need to update to new sensor paradigm. Added 30fps frame lock

master
Jake 2025-03-30 00:02:46 +08:00
parent 3934ec2ae1
commit 39cac21741
2 changed files with 46 additions and 12 deletions

32
game.js
View File

@ -105,8 +105,16 @@ 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() {
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
@ -119,7 +127,13 @@ function gameLoop() {
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;

View File

@ -65,6 +65,7 @@ time.sleep = async_sleep # ✅ Monkey-patch time.sleep()
}
initializePyodide();
self.postMessage({ type: "console", message: ":-(" });
self.onmessage = async (event) => {
if (!self.pyodide) {
@ -75,6 +76,9 @@ self.onmessage = async (event) => {
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);