feat(cockpit): ride a tracked satellite in an orbital view

With a satellite tracked and no aircraft tracked, Cockpit can ride the
satellite. Entry needs only the Satellites layer; debris can be tracked but
not entered, and voice stays aircraft-only. Double-clicking the tracked
satellite or the entry buttons (reading ORBIT) enter it.

The camera sits on the satellite's per-frame SGP4 position and looks
straight down, turned to the ground track (north-up for a satellite with
none). The optical zoom steps 1x to 8x with a focus pull, the arrows tilt
the view up to 45 degrees off nadir, and Home or 0 returns to nadir. Off
nadir the tilt reads its total angle first and the swath readout becomes an
approximation marked with ≈. While in orbit the map leases flat Esri
imagery, the cloud pass stays off and the view opens in the optical style.

The orbital HUD names the satellite with its owner's flag (from the
flag-icons package, loaded per country) or an organisation badge, its
operator, class, NORAD and COSPAR ids and TLE epoch with the element lines
on request, altitude, orbital speed and the sub-satellite point. CURRENTLY
OVER names the country and its first-level division, or the sea, and from
8x the most prominent populated place nearby, looked up offline from the
bundled Natural Earth packs (populated places are a new pack). The
satellites layer hides the ridden satellite's own marks, dims the other
orbit rings and ignores scene clicks and Escape while held. Exit restores
the camera's field of view and the satellite's follow camera.

C no longer enters or leaves Cockpit, bridge or orbit: it is left to the
app-wide CCTV shortcut, and Escape or the exit button leave first person.
This commit is contained in:
Denis Groshev committed 2026-11-09 00:24:22 +01:00
1 parent a648c9b665
commit 048293fc2a
67 files changed
+6642 -172

No files matched your search

+38 -2
View File
@@ -191,6 +191,28 @@
"Select {mission}": "{mission} auswählen",
"{value} KM": "{value} KM",
"{value} KM/S": "{value} KM/S",
"{direction} {angle}°": "{direction} {angle}°",
"OFF-NADIR {angle}° · {offset}": "NADIRABWEICHUNG {angle}° · {offset}",
"ZOOM {zoom}×": "ZOOM {zoom}×",
"SWATH {value} KM": "STREIFENBREITE {value} KM",
"SWATH ≈ {value} KM": "STREIFENBREITE ≈ {value} KM",
"Orbital view": "Orbitalansicht",
"ORBITAL VIEW · NADIR": "ORBITALANSICHT · NADIR",
"ORBITAL VELOCITY": "BAHNGESCHWINDIGKEIT",
"SUB-SATELLITE POINT": "SUBSATELLITENPUNKT",
"NORTH UP": "NORDEN OBEN",
"CURRENTLY OVER": "AKTUELL ÜBER",
"{division}, {country}": "{division}, {country}",
"{region} · near {place}": "{region} · nahe {place}",
"NORAD {id}": "NORAD {id}",
"EPOCH {time}": "EPOCHE {time}",
"TLE": "TLE",
"Show the two-line element set": "Zweizeilen-Bahnelemente anzeigen",
"Hide the two-line element set": "Zweizeilen-Bahnelemente ausblenden",
"Two-line element set": "Zweizeilen-Bahnelemente",
"Return the view to nadir": "Ansicht zurück auf den Nadir richten",
"Return to nadir (Home or 0)": "Zurück zum Nadir (Pos1 oder 0)",
"NADIR": "ZUM NADIR",
"SELECTED SPACE MISSION": "GEWÄHLTE RAUMMISSION",
"Show all missions": "Alle Missionen anzeigen",
"Deselect mission": "Mission abwählen",
@@ -483,6 +505,7 @@
"{label} · COURSE {heading}°": "{label} · KURS {heading}°",
"{label} · HEADING {heading}°": "{label} · STEUERKURS {heading}°",
"{label} · NO HEADING": "{label} · KEIN STEUERKURS",
"{label} · NADIR VIEW": "{label} · NADIRANSICHT",
"Context could not restore every layer; try again": "Kontext konnte nicht alle Ebenen wiederherstellen; erneut versuchen",
"No selected data layers": "Keine Datenebenen ausgewählt",
"{count} data layers could not be cleared": {
@@ -670,6 +693,7 @@
"Radio did not start": "Radio wurde nicht gestartet",
"Aircraft cockpit view": "Flugzeug-Cockpitansicht",
"Ship bridge view": "Ansicht von der Schiffsbrücke",
"Satellite orbital view": "Orbitalansicht vom Satelliten",
"LOOK STBD {bearing}°": "BLICK STEUERBORD {bearing}°",
"LOOK PORT {bearing}°": "BLICK BACKBORD {bearing}°",
"LOOK ASTERN": "BLICK ACHTERAUS",
@@ -757,8 +781,10 @@
"RESET": "RESET",
"Exit cockpit view": "Cockpitansicht verlassen",
"Exit bridge view": "Brückenansicht verlassen",
"Exit orbital view": "Orbitalansicht verlassen",
"EXIT COCKPIT": "COCKPIT VERLASSEN",
"EXIT BRIDGE": "BRÜCKE VERLASSEN",
"EXIT ORBIT": "ORBIT VERLASSEN",
"Navigation, voice, and visual preset controls": "Steuerung für Navigation, Sprache und visuelle Presets",
"Expand Visual Presets": "Visuelle Presets ausklappen",
"Pin visual presets": "Visuelle Presets anheften",
@@ -2872,9 +2898,11 @@
"SIG": "SIG",
"LOCAL": "LOKAL",
"ESC EXIT": "ESC BEENDEN",
"C TOGGLE": "C UMSCHALTEN",
"ARROWS LOOK": "PFEILE UMSEHEN",
"HOME RESET": "POS1 ZURÜCKSETZEN",
"+/− ZOOM": "+/− ZOOMEN",
"ARROWS TILT": "PFEILE NEIGEN",
"HOME NADIR": "POS1 NADIR",
"Active weather products": "Aktive Wetterprodukte",
"RECENT IMAGERY": "AKTUELLE BILDDATEN",
"Imagery days in the box": "Bildtage im Bereich",
@@ -3241,5 +3269,13 @@
"CelesTrak SATCAT gives each object's type and status. Without a current copy the classes rest on the UCS database, names and CelesTrak groups, so a satellite that has died since may still show as working.": "CelesTrak SATCAT liefert Typ und Status jedes Objekts. Ohne aktuelle Kopie stützen sich die Klassen auf die UCS-Datenbank, Namen und CelesTrak-Gruppen, sodass ein inzwischen ausgefallener Satellit noch als aktiv erscheinen kann.",
"STARLINK ···": "STARLINK ···",
"STARLINK ✕": "STARLINK ✕",
"COURSE HOLD · AIS": "KURS FIX · AIS"
"FWD": "VORAUS",
"AFT": "ACHTERN",
"RIGHT": "RECHTS",
"LEFT": "LINKS",
"TRACK UP": "KURS OBEN",
"COURSE HOLD · AIS": "KURS FIX · AIS",
"Zoom in (+)": "Hineinzoomen (+)",
"Zoom out (−)": "Herauszoomen (−)",
"ORBITAL VIEW · OFF-NADIR": "ORBITALANSICHT · NADIRABWEICHUNG"
}