/** * Main 3D Scene component */ import { Canvas } from '@react-three/fiber'; import { OrbitControls, Stars as BackgroundStars } from '@react-three/drei'; import { useMemo } from 'react'; import { CelestialBody } from './CelestialBody'; import { Probe } from './Probe'; import { CameraController } from './CameraController'; import { Trajectory } from './Trajectory'; import { OrbitRenderer } from './OrbitRenderer'; import { Stars } from './Stars'; import { Constellations } from './Constellations'; import { Galaxies } from './Galaxies'; import { Nebulae } from './Nebulae'; import { scalePosition } from '../utils/scaleDistance'; import type { CelestialBody as CelestialBodyType, Position } from '../types'; interface SceneProps { bodies: CelestialBodyType[]; selectedBody: CelestialBodyType | null; trajectoryPositions?: Position[]; } export function Scene({ bodies, selectedBody, trajectoryPositions = [] }: SceneProps) { // Separate natural celestial bodies (planets/dwarf planets/satellites/stars) from probes const celestialBodies = bodies.filter((b) => b.type !== 'probe'); const probes = bodies.filter((b) => b.type === 'probe'); // Always show all probes (changed from previous behavior) const visibleProbes = probes; // Calculate target position for OrbitControls const controlsTarget = useMemo(() => { if (selectedBody) { const pos = selectedBody.positions[0]; const scaledPos = scalePosition(pos.x, pos.y, pos.z); return [scaledPos.x, scaledPos.z, scaledPos.y] as [number, number, number]; } return [0, 0, 0] as [number, number, number]; }, [selectedBody]); return (