UI: Info-Zeile kompakt, kurze Viewport-Hinweise

This commit is contained in:
slyphax 2026-10-25 10:32:01 +01:00
parent 3094395444
commit 59c932dc35

View file

@ -631,7 +631,7 @@ func _build_center_viewport() -> SubViewportContainer:
# Bedien-Hinweis im Viewport (Overlay) # Bedien-Hinweis im Viewport (Overlay)
help_label = Label.new() help_label = Label.new()
help_label.text = "Linksklick: auswählen & ziehen · Umschalt+Klick: Auswahl erweitern · Rahmen aufziehen: mehrere wählen · Strg+G: gruppieren\nR / Mausrad: drehen · Strg+D: duplizieren · Bild↑/↓: anheben/absenken · Spiegeln rechts · Entf: löschen · Strg+Z: zurück" help_label.text = "Linksklick: auswählen · Rahmen: mehrere · R: drehen · Entf: löschen · H: Hilfe"
help_label.set_anchors_preset(Control.PRESET_BOTTOM_WIDE) help_label.set_anchors_preset(Control.PRESET_BOTTOM_WIDE)
help_label.offset_left = UIScale.px(12) help_label.offset_left = UIScale.px(12)
help_label.offset_bottom = UIScale.px(-8) help_label.offset_bottom = UIScale.px(-8)
@ -1343,7 +1343,7 @@ func _update_tool_label() -> void:
"bauen": "Bauen (F3)", "bauen": "Bauen (F3)",
"spawns": "Spawn-Zonen (F4)", "spawns": "Spawn-Zonen (F4)",
} }
tool_label.text = "Werkzeug: %s · Umschalt+F = Flugmodus" % str(names.get(tool_mode, tool_mode)) tool_label.text = "Werkzeug: %s" % str(names.get(tool_mode, tool_mode))
## Symmetrie-Schalter (Karte t_f5935023, M1): Modus aus dem Toolbar-Menü übernehmen. ## Symmetrie-Schalter (Karte t_f5935023, M1): Modus aus dem Toolbar-Menü übernehmen.
@ -1829,7 +1829,7 @@ func _enter_terrain_mode() -> void:
_sync_terrain_button() _sync_terrain_button()
return return
tool_mode = "terrain" tool_mode = "terrain"
help_label.text = "Linksklick-Ziehen: Boden formen oder malen · Strg+Linksklick: Gegenteil / Steppe zurück ·\n1/2/3/4: Heben/Senken/Glätten/Malen · [ / ]: Pinselgröße Klein/Mittel/Groß ·\nPinselgröße & Material rechts · Rechte Maustaste: Flug · Strg+Z: letzter Strich weg" help_label.text = "Linksklick-Ziehen: formen bzw. malen · Strg+Klick: Gegenteil · [ ]: Pinselgröße · H: Hilfe"
terrain_tool.call("set_brush_mode", terrain_mod._selected_terrain_mode()) terrain_tool.call("set_brush_mode", terrain_mod._selected_terrain_mode())
terrain_mod.refresh_panels() terrain_mod.refresh_panels()
_set_status("Terrain-Modus an: LINKSKLICK-Ziehen formt den Boden, im Malen-Modus färbt er das Gelände (Steppe/Sand/Fels …). Regler rechts stellen Pinsel und Stärke ein.") _set_status("Terrain-Modus an: LINKSKLICK-Ziehen formt den Boden, im Malen-Modus färbt er das Gelände (Steppe/Sand/Fels …). Regler rechts stellen Pinsel und Stärke ein.")
@ -1849,7 +1849,7 @@ func _enter_spawn_mode() -> void:
interaction.call("clear_selection", true) interaction.call("clear_selection", true)
tool_mode = "spawns" tool_mode = "spawns"
check_mod.spawn_panel.visible = true check_mod.spawn_panel.visible = true
help_label.text = "Linksklick: Zone setzen · Klick+Ziehen: Zone verschieben · Entf: löschen ·\nTeam/Radius rechts · Mittlere Maustaste: Kamera · Strg+Z: zurück" help_label.text = "Linksklick: Zone setzen · Ziehen: verschieben · Entf: löschen · H: Hilfe"
check_mod.spawn_edit_btn.button_pressed = true check_mod.spawn_edit_btn.button_pressed = true
spawn_tool.call("activate") spawn_tool.call("activate")
spawn_tool.call("set_team", check_mod._selected_spawn_team()) spawn_tool.call("set_team", check_mod._selected_spawn_team())
@ -1868,7 +1868,7 @@ func _leave_spawn_mode() -> void:
func _enter_objects_mode() -> void: func _enter_objects_mode() -> void:
tool_mode = "objects" tool_mode = "objects"
help_label.text = "Linksklick: auswählen & ziehen · Umschalt+Klick: Auswahl erweitern · Rahmen aufziehen: mehrere wählen · Strg+G: gruppieren\nR: 90° drehen (Mausrad: 15° fein) · Pfeiltasten: 2-m-Raster · G: greifen (Esc: zurück) · Strg+D: duplizieren · Bild↑/↓: anheben/absenken\nStrg+Bild↑: auf Boden setzen · Strg halten: Snap-Zwang · Spiegeln rechts · Entf: löschen · Strg+Z: zurück" help_label.text = "Linksklick: auswählen · Rahmen: mehrere · R: drehen · Entf: löschen · H: Hilfe"
_base_tool_status() _base_tool_status()
@ -1901,7 +1901,7 @@ func _enter_build_mode() -> void:
interaction.call("clear_selection", true) interaction.call("clear_selection", true)
tool_mode = "bauen" tool_mode = "bauen"
build_panel.visible = true build_panel.visible = true
help_label.text = "Linksklick: Bauteil setzen (auch auf andere Teile = stapeln) · Umschalt+Klick: Bauteil auswählen ·\nR: drehen (90°) · Pfeiltasten: im 2-m-Raster verschieben · Bild↑/↓: anheben/absenken · Strg+Bild↑: auf Boden · Entf: löschen · Mittlere Maustaste: Kamera · Strg+Z: zurück" help_label.text = "Linksklick: Bauteil setzen · R: drehen · Entf: löschen · H: Hilfe"
build_edit_btn.button_pressed = true build_edit_btn.button_pressed = true
if ui_right_panel is TabContainer and bauen_mod != null: if ui_right_panel is TabContainer and bauen_mod != null:
(ui_right_panel as TabContainer).current_tab = bauen_mod.get_index() (ui_right_panel as TabContainer).current_tab = bauen_mod.get_index()
@ -1982,7 +1982,7 @@ func _recheck_terrain_mode() -> void:
# Karte t_89c0ec95: Dezenter Terrain-Rückschalter = ebenfalls ein # Karte t_89c0ec95: Dezenter Terrain-Rückschalter = ebenfalls ein
# Werkzeugwechsel — Linien wieder ausblenden (sofern nicht fixiert). # Werkzeugwechsel — Linien wieder ausblenden (sofern nicht fixiert).
_sync_contours_to_builder() _sync_contours_to_builder()
help_label.text = "Linksklick: auswählen & ziehen · Umschalt+Klick: Auswahl erweitern · Rahmen aufziehen: mehrere wählen · Strg+G: gruppieren\nR: 90° drehen (Mausrad: 15° fein) · Pfeiltasten: 2-m-Raster · G: greifen (Esc: zurück) · Strg+D: duplizieren · Bild↑/↓: anheben/absenken\nStrg+Bild↑: auf Boden setzen · Strg halten: Snap-Zwang · Spiegeln rechts · Entf: löschen · Strg+Z: zurück" help_label.text = "Linksklick: auswählen · Rahmen: mehrere · R: drehen · Entf: löschen · H: Hilfe"
_set_status("Terrain-Modus aus: Diese Map passt nicht ins Editor-MVP (Terrain-Auflösung über %d) — die Objekte bleiben normal bearbeitbar." % TerrainField.EDITOR_MAX_RESOLUTION, true) _set_status("Terrain-Modus aus: Diese Map passt nicht ins Editor-MVP (Terrain-Auflösung über %d) — die Objekte bleiben normal bearbeitbar." % TerrainField.EDITOR_MAX_RESOLUTION, true)
@ -2179,9 +2179,13 @@ func _refresh_stats() -> void:
var count := SvmapDocument.object_count(doc) var count := SvmapDocument.object_count(doc)
var poly := SvmapDocument.poly_usage(doc, manifest) var poly := SvmapDocument.poly_usage(doc, manifest)
var budget := int(SvmapIO.MAX_TOTAL_POLY) var budget := int(SvmapIO.MAX_TOTAL_POLY)
stats_objects.text = "Objekte: %d / 5000 · Poly-Budget: %s / %s (%.0f %%) · Bauteile: %d" % [ var poly_pct := 100.0 * poly / budget
count, _fmt_int(int(poly)), _fmt_int(budget), 100.0 * poly / budget, stats_objects.text = "%d Objekte · Poly %.0f %%" % [count, poly_pct]
BuildOps.piece_count(doc)] stats_objects.tooltip_text = "Objekte: %d / 5000\nPoly-Budget: %s / %s (%.0f %%)\nBauteile: %d" % [
count, _fmt_int(int(poly)), _fmt_int(budget), poly_pct, BuildOps.piece_count(doc)]
# Nur bei knappem Budget auffällig färben (sonst ruhiger Nebentext).
stats_objects.add_theme_color_override("font_color", get_theme_color(
"warning" if poly_pct >= 90.0 or count >= 4500 else "field", "Editor"))
# GLB-Fehlende Objekte (Karte t_9b50b231): Platzhalter laufen, aber Sly soll # GLB-Fehlende Objekte (Karte t_9b50b231): Platzhalter laufen, aber Sly soll
# sehen, WELCHE echten Modelle im Mesh-Lager nachgelegt werden müssen. # sehen, WELCHE echten Modelle im Mesh-Lager nachgelegt werden müssen.
if view_builder != null and not (view_builder.get("fehlende_glbs") as Array).is_empty(): if view_builder != null and not (view_builder.get("fehlende_glbs") as Array).is_empty():
@ -2189,7 +2193,7 @@ func _refresh_stats() -> void:
var nennung := ", ".join(fehlend.slice(0, 3)) var nennung := ", ".join(fehlend.slice(0, 3))
if fehlend.size() > 3: if fehlend.size() > 3:
nennung += " … (+%d weitere)" % (fehlend.size() - 3) nennung += " … (+%d weitere)" % (fehlend.size() - 3)
stats_objects.text += " · ⚠ GLB fehlt: %s" % nennung stats_objects.text += " · ⚠ GLB fehlt: %s" % nennung
# Terrain-Anteil am Quest-3-Budget (res 513 = 524.288 Dreiecke, map_format.md §4) # Terrain-Anteil am Quest-3-Budget (res 513 = 524.288 Dreiecke, map_format.md §4)
var tris := 0 var tris := 0
var res := 0 var res := 0
@ -2199,8 +2203,9 @@ func _refresh_stats() -> void:
var quest_budget := 524288 var quest_budget := 524288
var pct := 100.0 * float(tris) / float(quest_budget) var pct := 100.0 * float(tris) / float(quest_budget)
var fps := Engine.get_frames_per_second() var fps := Engine.get_frames_per_second()
stats_terrain.text = " · Terrain: %s² Grid, %s Dreiecke (%.0f %% Quest-Budget) · %d FPS" % [ stats_terrain.text = "Terrain %s² · %d FPS" % [str(res) if res > 0 else "—", fps]
str(res) if res > 0 else "—", _fmt_int(tris), pct, fps] stats_terrain.tooltip_text = "Terrain: %s² Grid, %s Dreiecke (%.0f %% Quest-Budget)" % [
str(res) if res > 0 else "—", _fmt_int(tris), pct]
func _refresh_file_label() -> void: func _refresh_file_label() -> void: