≡ DRAG HERE ≡
◆ PROTOSS CARRIER ◆

🌍 HABITABLE WORLDS 🌍

Kepler-452b
1,402 light-years
Super-Earth
Proxima Centauri b
4.24 light-years
Terrestrial
TRAPPIST-1e
40 light-years
Terrestrial

◆ Tactical Display ◆

☰ System Analysis ☰

Tactical overview of Sol System. Click on any planet to access detailed geological and atmospheric data. Use neural interface to navigate viewpoint.

Detected Objects:
⦿ Sol Primary - Main sequence star
⦿ Mercury - Inner rocky world
⦿ Venus - Atmospheric dense world
⦿ Earth - Habitable world + Luna satellite
⦿ Mars - Outer rocky world
⦿ Jupiter - Gas giant + 4 major moons
⦿ Saturn - Ringed giant + 2 major moons
⦿ Uranus - Ice giant
⦿ Neptune - Outer ice giant
×

Planet Name

High-resolution planetary imagery loading...
🌍 HABITABLE WORLDS 🌍
Kepler-452b
1,402 ly • Super-Earth
Proxima Centauri b
4.24 ly • Terrestrial
TRAPPIST-1e
40 ly • Terrestrial
TOI-715 b
137 ly • Super-Earth
K2-18 b
124 ly • Sub-Neptune
Kepler-186f
582 ly • Terrestrial
Kepler-442b
1,206 ly • Super-Earth
d('speedDisplay').textContent = controls.speed; updateSliderTrack(speedSlider, speedTrack); sounds.sciBeep && sounds.sciBeep(); }); speedSlider.addEventListener('mousedown', () => sounds.sciBeep && sounds.sciBeep()); updateSliderTrack(speedSlider, speedTrack); // Planet size control const sizeSlider = document.getElementById('planetSize'); const sizeTrack = document.getElementById('sizeTrack'); sizeSlider.addEventListener('input', (e) => { controls.planetSize = parseFloat(e.target.value); document.getElementById('sizeDisplay').textContent = controls.planetSize; updateSliderTrack(sizeSlider, sizeTrack); updatePlanetSizes(); sounds.sciBeep && sounds.sciBeep(); }); sizeSlider.addEventListener('mousedown', () => sounds.sciBeep && sounds.sciBeep()); updateSliderTrack(sizeSlider, sizeTrack); // Camera distance control const distanceSlider = document.getElementById('cameraDistance'); const distanceTrack = document.getElementById('distanceTrack'); distanceSlider.addEventListener('input', (e) => { controls.cameraDistance = parseFloat(e.target.value); document.getElementById('distanceDisplay').textContent = controls.cameraDistance; updateSliderTrack(distanceSlider, distanceTrack); updateCameraPosition(); sounds.sciBeep && sounds.sciBeep(); }); distanceSlider.addEventListener('mousedown', () => sounds.sciBeep && sounds.sciBeep()); updateSliderTrack(distanceSlider, distanceTrack); // Close button for planet details document.getElementById('closeDetails').addEventListener('click', () => { hidePlanetDetails(); sounds.sciBeep && sounds.sciBeep(); }); // Close panel when clicking outside document.getElementById('planetDetails').addEventListener('click', (e) => { if (e.target.id === 'planetDetails') { hidePlanetDetails(); } }); } function updateSliderTrack(slider, track) { const percentage = ((slider.value - slider.min) / (slider.max - slider.min)) * 100; track.style.width = percentage + '%'; } function updatePlanetSizes() { planets.forEach(planet => { const newSize = planet.userData.originalSize * controls.planetSize; planet.geometry.dispose(); planet.geometry = new THREE.SphereGeometry(newSize, 16, 16); }); } function updateCameraPosition() { const distance = controls.cameraDistance; camera.position.x = distance * Math.cos(cameraAngleX) * Math.cos(cameraAngleY); camera.position.y = distance * Math.sin(cameraAngleX); camera.position.z = distance * Math.cos(cameraAngleX) * Math.sin(cameraAngleY); camera.lookAt(0, 0, 0); } function setupEvents() { // Mouse controls renderer.domElement.addEventListener('mousedown', (e) => { mouseDown = true; mouseX = e.clientX; mouseY = e.clientY; // Resume audio context on first user interaction if (audioContext && audioContext.state === 'suspended') { audioContext.resume(); } }); renderer.domElement.addEventListener('mousemove', (e) => { // Update mouse coordinates for raycasting mouse.x = (e.clientX / window.innerWidth) * 2 - 1; mouse.y = -(e.clientY / window.innerHeight) * 2 + 1; if (mouseDown) { const deltaX = e.clientX - mouseX; const deltaY = e.clientY - mouseY; cameraAngleY -= deltaX * 0.01; cameraAngleX -= deltaY * 0.01; cameraAngleX = Math.max(-Math.PI/2, Math.min(Math.PI/2, cameraAngleX)); updateCameraPosition(); mouseX = e.clientX; mouseY = e.clientY; } }); // Planet selection on click renderer.domElement.addEventListener('click', (e) => { if (!mouseDown) { mouse.x = (e.clientX / window.innerWidth) * 2 - 1; mouse.y = -(e.clientY / window.innerHeight) * 2 + 1; raycaster.setFromCamera(mouse, camera); const intersects = raycaster.intersectObjects(planets); if (intersects.length > 0) { const selectedPlanet = intersects[0].object; if (selectedPlanet.userData.selectable) { showPlanetDetails(selectedPlanet.userData); } } } }); window.addEventListener('mouseup', () => { mouseDown = false; }); // Zoom with mouse wheel renderer.domElement.addEventListener('wheel', (e) => { controls.cameraDistance += e.deltaY * 0.5; controls.cameraDistance = Math.max(100, Math.min(1000, controls.cameraDistance)); document.getElementById('cameraDistance').value = controls.cameraDistance; document.getElementByI