import { Robot } from "./robot.js"; const consoleElement = document.getElementById("console"); const gameCanvas = document.getElementById("gameCanvas"); const ctx = gameCanvas.getContext("2d"); let pyodideWorker = startPyodideWorker(); let robots = createInitialRobots(); let paused = false; // ✅ Function to create the Pyodide Worker function startPyodideWorker() { const worker = new Worker("pyodide-worker.js"); // ✅ Reattach the event listener when a new worker is created worker.onmessage = (event) => { if (paused) return; switch (event.data.type) { case "console": logToConsole(event.data.data); break; case "error": logToConsole(`${event.data.message}`); break; case "fire": fire(); break; case "turn": turn(event.data.data); break; case "move": move(event.data.data); break; } }; return worker; } // ✅ Function to create initial robots function createInitialRobots() { return { "player": new Robot("player", 50, 50, "blue"), "enemy1": new Robot("enemy1", 200, 150, "red"), "enemy2": new Robot("enemy2", 400, 250, "red") }; } // ✅ Function to log messages to console function logToConsole(text) { console.log(text.replace("", "").replace("", "")); consoleElement.innerHTML += text.replace(/\n/g, "
") + "
"; consoleElement.scrollTop = consoleElement.scrollHeight; } // ✅ Game Control Functions function fire() { logToConsole("🔥 Gun Fired! 🔥"); } function turn(deg) { robots["player"].turn(deg); } function move(distance) { robots["player"].move(distance); } // ✅ Pause/Resume Function function togglePause() { paused = !paused; document.getElementById("pause-button").innerText = paused ? "Resume" : "Pause"; } // ✅ Reset Function (Fixed) function resetGame() { // Terminate the worker pyodideWorker.terminate(); // Restart the worker and rebind event listener pyodideWorker = startPyodideWorker(); // Reset the robots to their initial state robots = createInitialRobots(); // Clear the console consoleElement.innerHTML = ""; // Unpause the game if it was paused paused = false; document.getElementById("pause-button").innerText = "Pause"; } // ✅ Game Loop function gameLoop() { if (!paused) { ctx.clearRect(0, 0, gameCanvas.width, gameCanvas.height); for (let id in robots) { robots[id].update(ctx); } } requestAnimationFrame(gameLoop); } // Start game loop gameLoop(); // ✅ Button Event Listeners document.getElementById("compile-button").addEventListener("click", () => { if (paused) return; const code = document.getElementById("python-code").value; consoleElement.innerHTML = ""; pyodideWorker.postMessage({ type: "execute", code: code }); }); document.getElementById("pause-button").addEventListener("click", togglePause); document.getElementById("reset-button").addEventListener("click", resetGame);