feat(ui): zoom-based LoD for star map labels

Labels now appear based on zoom level and system importance:
- Always: selected + hovered
- Zoom >= 1.2: hubs, junctions, gateway
- Zoom >= 2.0: all named systems
- Below 1.2: only selected/hovered

Prevents label soup at overview zoom levels.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-05 12:20:00 +02:00
co-authored by Claude Opus 4.6
parent 3439b05e88
commit a7fbf7a0d9
+26 -16
View File
@@ -415,25 +415,35 @@ func _draw_systems(center: Vector2) -> void:
draw_circle(pos, radius, color)
# System name label — centered below the dot
# System name label — centered below dot, zoom-based LoD
var label: String = node.get("proper_name", "")
if not label.is_empty() and label != sid:
var label_color: Color
var show_label := false
if sid == _selected_system or sid == _hovered_system:
label_color = COLOR_TEXT
else:
label_color = COLOR_TEXT_DIM
var font := get_theme_default_font()
var label_size := font.get_string_size(label, HORIZONTAL_ALIGNMENT_LEFT, -1, 9)
draw_string(
font,
pos + Vector2(-label_size.x / 2.0, radius + 10.0),
label,
HORIZONTAL_ALIGNMENT_LEFT,
-1,
9,
label_color,
)
show_label = true # always show selected/hovered
elif _zoom >= 2.0:
show_label = true # zoomed in: show all
elif _zoom >= 1.2:
show_label = topology in ["hub", "junction", ""] # medium: hubs + junctions + gateway
# else: zoomed out, only selected/hovered
if show_label:
var label_color: Color
if sid == _selected_system or sid == _hovered_system:
label_color = COLOR_TEXT
else:
label_color = COLOR_TEXT_DIM
var font := get_theme_default_font()
var label_size := font.get_string_size(label, HORIZONTAL_ALIGNMENT_LEFT, -1, 9)
draw_string(
font,
pos + Vector2(-label_size.x / 2.0, radius + 10.0),
label,
HORIZONTAL_ALIGNMENT_LEFT,
-1,
9,
label_color,
)
func _draw_edges(center: Vector2) -> void: