feat(ui): unify star map and atlas into single implant/map chain (#844)

Per D-191, the atlas is the star map extended downward — not a separate
app. AtlasPanel now owns the full Reach → system → planet → heightmap
zoom hierarchy as a single HudGroups app (implant/map).

- Add REACH_MAP as Level 0 of AtlasPanel's zoom hierarchy; renumber the
  enum so higher index = deeper zoom
- Port hop-ring rendering (pan/zoom, system markers, hover/info, sector
  layout) from star_map.gd into AtlasPanel methods
- Change AtlasPanel.APP_PATH from "implant/map/atlas" to "implant/map"
- main.gd: KEY_M toggles unified atlas; KEY_A binding removed
- Symmetric nav: ORBITAL_DIAGRAM back goes to REACH_MAP (not
  SYSTEM_PICKER), matching the forward skip
- hud_groups.gd docstring documents the unified path and flags the
  legacy starchart path as kept-for-compat (retirement tracked in #852)

star_map.gd's HudGroups registration stays live but inert — no key
binding reaches it. Full retirement follows in #852 after a sprint of
soak on the unified panel.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-19 11:52:15 +02:00
co-authored by Claude Opus 4.6
parent 25bb54bc43
commit a06646d810
4 changed files with 484 additions and 26 deletions
+6 -5
View File
@@ -11,17 +11,18 @@ extends Node
##
## Groups use hierarchical paths:
## "gameplay" — HUD status, minimap, prompts, stance
## "implant/map/starchart" — star map navigator
## "implant/map" — unified atlas (reach map → system → planet → regional, D-191)
## "implant/map/starchart" — legacy hop-ring view (registered by StarMapRenderer, kept for compat)
## "implant/wiki/gttr" — Drifter's Guide reader
## "implant/journal" — knowledge journal
## "implant/economics" — economics monitor (D-181, #824)
##
## Usage:
## HudGroups.register(self, "implant/map/starchart")
## HudGroups.open_app("implant/map/starchart") # fullscreen by default
## HudGroups.open_app("implant/map/starchart", HudGroups.MODE_INSERT)
## HudGroups.register(self, "implant/map")
## HudGroups.open_app("implant/map") # fullscreen by default
## HudGroups.open_app("implant/map", HudGroups.MODE_INSERT)
## HudGroups.close_app()
## HudGroups.toggle_app("implant/map/starchart")
## HudGroups.toggle_app("implant/map")
## Emitted when an app opens, closes, or changes mode.
## mode is a HudGroups.Mode enum value.
+2 -5
View File
@@ -178,17 +178,14 @@ func _ready() -> void:
func _unhandled_key_input(event: InputEvent) -> void:
if event.is_pressed() and not event.is_echo():
if event is InputEventKey and event.keycode == KEY_M:
if star_map:
star_map.toggle_visible()
elif event is InputEventKey and event.keycode == KEY_A:
# #834: A — toggle Atlas implant panel (FULLSCREEN, implant/map/atlas)
# #844: M — unified atlas (implant/map). Reach map → system → planet → regional.
if atlas_panel:
atlas_panel.toggle_visible()
elif event is InputEventKey and event.keycode == KEY_N:
# #824: N — toggle Economics Monitor implant panel (E is bound to interact).
# Gated on the atlas being inactive so the viewer's N → city-economics
# cross-link isn't shadowed by this global toggle (review #6).
if economics_panel and not HudGroups.is_app_active("implant/map/atlas"):
if economics_panel and not HudGroups.is_app_active("implant/map"):
economics_panel.toggle_visible()
elif event is InputEventKey and event.keycode == KEY_BRACKETLEFT:
# #824: [ — cycle economics panel system selector backward