feat(ui): atlas implant panel — system picker, orbital diagram, body nav (#834)
3-level atlas navigation as an implant/map/atlas FULLSCREEN app (D-170 z=20): system picker (◄ ► cycle, Enter opens orbital) → orbital diagram (star centre, bodies grouped by orbit_index with moons sub-orbiting parents, stations as markers, click-to-open body or mini station panel) → body entry (data sheet, Enter stub for #835 heightmap viewer, Esc back). Composed from the ImplantPanel component library (D-169). Wires the panel into hud.tscn, adds an A-key toggle in main.gd, propagates insert_state via snapshot_consumers. Extends generate-star-map-data.py to emit per-system orbit_bodies + stations arrays (with currency_zone, atmosphere, population, terrain_reference, etc.) from systems.db; star_map_data.json regenerated deterministically. Per D-191 §6, Phase 3.
This commit is contained in:
@@ -34,6 +34,7 @@ var _dialogue: DialogueCoordinator # #775: dialogue consumers + signal handlers
|
||||
@onready var news_ticker = $UILayer/NewsTicker # #592: scrolling headline bar (D-049 z-7)
|
||||
@onready var star_map = $InsertOverlay/HUD/StarMap # #674: star map insert module (hop-ring view)
|
||||
@onready var economics_panel = $InsertOverlay/HUD/EconomicsPanel # #824: economics monitor (D-170)
|
||||
@onready var atlas_panel = $InsertOverlay/HUD/AtlasPanel # #834: atlas implant — system → orbital → body (D-191)
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
@@ -93,6 +94,7 @@ func _ready() -> void:
|
||||
"minimap": minimap,
|
||||
"star_map": star_map,
|
||||
"economics_panel": economics_panel,
|
||||
"atlas_panel": atlas_panel,
|
||||
},
|
||||
_screen_flash
|
||||
)
|
||||
@@ -172,6 +174,10 @@ func _unhandled_key_input(event: InputEvent) -> void:
|
||||
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)
|
||||
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)
|
||||
if economics_panel:
|
||||
|
||||
@@ -18,6 +18,7 @@ var interaction_prompt: Node = null
|
||||
var minimap: Node = null
|
||||
var star_map: Node = null
|
||||
var economics_panel: Node = null # #824: economics monitor (D-181)
|
||||
var atlas_panel: Node = null # #834: atlas implant panel (D-191)
|
||||
|
||||
var _screen_flash_fn: Callable # Callable(color: Color, duration: float)
|
||||
|
||||
@@ -39,6 +40,7 @@ func init(refs: Dictionary, screen_flash: Callable) -> SnapshotConsumers:
|
||||
minimap = refs.get("minimap")
|
||||
star_map = refs.get("star_map")
|
||||
economics_panel = refs.get("economics_panel")
|
||||
atlas_panel = refs.get("atlas_panel")
|
||||
_screen_flash_fn = screen_flash
|
||||
return self
|
||||
|
||||
@@ -58,6 +60,8 @@ func propagate_insert_state() -> void:
|
||||
star_map.set_insert_active(insert_state)
|
||||
if economics_panel:
|
||||
economics_panel.set_insert_active(insert_state)
|
||||
if atlas_panel:
|
||||
atlas_panel.set_insert_active(insert_state)
|
||||
|
||||
|
||||
# D-057: Update interaction list from game state.
|
||||
|
||||
Reference in New Issue
Block a user