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

52
game.js
View File

@ -105,21 +105,35 @@ function resetGame() {
document.getElementById("pause-button").innerText = "Pause"; document.getElementById("pause-button").innerText = "Pause";
} }
const targetFPS = 30;
const targetInterval = 1000 / targetFPS; // Time in milliseconds per frame
let lastFrameTime = 0;
// ✅ Game Loop // ✅ Game Loop
function gameLoop() { function gameLoop(timestamp) {
if (!paused) { const deltaTime = timestamp - lastFrameTime;
ctx.resetTransform(); // If enough time has passed since the last frame, update and draw
// Fill the entire visible canvas to remove artifacts if (deltaTime >= targetInterval) {
ctx.fillStyle = "#DDD"; lastFrameTime = timestamp;
ctx.fillRect(0, 0, gameCanvas.width, gameCanvas.height); 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.translate(offsetX, offsetY); // Apply panning
ctx.scale(scale, scale); // Apply zooming ctx.scale(scale, scale); // Apply zooming
gameWorld.update(); gameWorld.update();
gameWorld.draw(ctx); gameWorld.draw(ctx);
pyodideWorker.postMessage({
type: "game_state",
state: gameWorld
});
}
} }
requestAnimationFrame(gameLoop); requestAnimationFrame(gameLoop);
} }
@ -128,6 +142,22 @@ resetGame(); // Initialize the game and robots
// Start game loop // Start game loop
gameLoop(); 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 // ✅ Button Event Listeners
document.getElementById("compile-button").addEventListener("click", () => { document.getElementById("compile-button").addEventListener("click", () => {
if (paused) return; if (paused) return;

View File

@ -65,16 +65,20 @@ time.sleep = async_sleep # ✅ Monkey-patch time.sleep()
} }
initializePyodide(); initializePyodide();
self.postMessage({ type: "console", message: ":-(" });
self.onmessage = async (event) => { self.onmessage = async (event) => {
if (!self.pyodide) { if (!self.pyodide) {
self.postMessage({ type: "error", message: "Pyodide not initialized yet." }); self.postMessage({ type: "error", message: "Pyodide not initialized yet." });
return; return;
} }
if (event.data.type === "sensor_update") { if (event.data.type === "sensor_update") {
// ✅ Update sensor data // ✅ Update sensor data
Object.assign(sensorData, event.data.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") { } else if (event.data.type === "execute") {
try { try {
let result = await self.pyodide.runPythonAsync(event.data.code); let result = await self.pyodide.runPythonAsync(event.data.code);