Alien Invasion Simulator

5
5

Simulation Not Yet Run

Set parameters in the Setup tab and click "Initiate Simulation" to see the outcome.

Alien Invasion Simulation Report

Simulation Parameters

    Simulation Log

    Final Outcome

    ${outcomeSummaryText}

    `; // Populate PDF Content pdfParamsList.innerHTML = `
  • Earth Defense Readiness: ${settings.earthDefense}/10
  • Alien Technology Level: ${settings.alienTech}/10
  • Invasion Fleet Size: ${settings.fleetSizeName} (Modifier: ${settings.fleetSizeValue})
  • `; pdfLogContainer.innerHTML = '

    Simulation Log

    '; // Reset PDF log area logMessages.forEach(msg => { const entry = document.createElement('div'); entry.className = 'pdf-log-entry'; entry.textContent = msg; pdfLogContainer.appendChild(entry); }); pdfOutcomePara.textContent = `${finalOutcome} - ${outcomeSummaryText}`; // Switch to results tab document.querySelector('.sim-active-tab').classList.remove('sim-active-tab'); document.querySelector('.sim-active-panel').classList.remove('sim-active-panel'); document.querySelector('button[data-tab="results-panel"]').classList.add('sim-active-tab'); document.getElementById('results-panel').classList.add('sim-active-panel'); // --- Finalize --- downloadButton.disabled = false; startButton.disabled = false; simulationRunning = false; } // --- Event Listeners --- startButton.addEventListener('click', runSimulation); downloadButton.addEventListener('click', () => { if (simulationRunning || logMessages.length === 0) return; const element = document.getElementById('sim-pdf-content'); const opt = { margin: [15, 10, 15, 10], // mm T, L, B, R filename: 'Alien_Invasion_Simulation_Report.pdf', image: { type: 'jpeg', quality: 0.98 }, html2canvas: { scale: 2, useCORS: true, logging: false }, jsPDF: { unit: 'mm', format: 'a4', orientation: 'portrait' } }; // Make element temporarily visible for rendering element.style.visibility = 'visible'; element.style.position = 'fixed'; element.style.height = 'auto'; element.style.left = '0'; element.style.top = '0'; element.style.zIndex = '9999'; element.style.opacity = '1'; console.log("Generating PDF Report..."); html2pdf().set(opt).from(element).save().then(() => { console.log("PDF Report Generated."); // Hide element again element.style.visibility = 'hidden'; element.style.position = 'fixed'; element.style.height = '0'; element.style.left = '-9999px'; element.style.zIndex = '-1'; element.style.opacity = '0'; }).catch(err => { console.error("PDF generation failed:", err); // Ensure element is hidden on error element.style.visibility = 'hidden'; element.style.position = 'fixed'; element.style.height = '0'; element.style.left = '-9999px'; element.style.zIndex = '-1'; element.style.opacity = '0'; }); }); } // End of initializeSim })(); // IIFE
    Scroll to Top