From a7fbf7a0d99ffd3ca0d02a6f1b56826381a6585b Mon Sep 17 00:00:00 2001 From: Jeroen Schweitzer Date: Sun, 5 Apr 2026 12:20:00 +0200 Subject: [PATCH] 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) --- client/ui/star_map.gd | 42 ++++++++++++++++++++++++++---------------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/client/ui/star_map.gd b/client/ui/star_map.gd index 7dc3b1516..62a0401f7 100644 --- a/client/ui/star_map.gd +++ b/client/ui/star_map.gd @@ -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: