scopedvr-map-editor/src/ui/help_text.gd
Hermes godot-vr b85e3bed52 Map-Editor: Höhenlinien nur im Terrain-Werkzeug (t_89c0ec95)
Sly-Wunsch 17.10.: "die Dauersicht stört" — die Konturen sind genial, aber
nur im Terrain-Werkzeug (F1) gewünscht.

Kopplung am Werkzeug-Wechselpunkt: _set_tool_mode, _after_structure_change
und _recheck_terrain_mode eichen die Konturen NACH (effektiv = Nutzer-Fix
ODER Terrain-Werkzeug). Kein _process-Poll — die Umschaltung passiert
synchron im selben Aufruf, hart ohne Fade (billig und deterministisch).

NEU: Taste L (Action editor_contours_toggle; L war sonst unbesetzt —
Kollisions-Prüfung im Test) und der Button „≈ Höhenlinien" fixieren die
Linien als NUTZER-Wahl dauerhaft in jedem Werkzeug. Default = Fix AUS,
Linien erscheinen also nur bei F1.

Regression aus dem Fundus gefixt: _after_structure_change baute
terrain_view neu OHNE Kontur-Nacheich (das Gitter hatte ihn, die Linien
nicht) — nach jedem Strg+Z kehrte die Dauersicht zurück. Der Rebuild
bekommt jetzt denselben Nacheich wie das Gitter.

Das Relief-Shading (Hillshade + Höhen-Kurve) bleibt davon unberührt und
immer an. Auf flachen Maps (< 2 m Relief) schaltet der Shader weiter
selbst auf aus.

Doku: docs/tasten.md (L-Zeile in Werkzeuge + Kopplungs-Absatz) und
H-Overlay-Zeile (help_text.gd).

Tests: test_shortcuts +5 Checks (Action registriert, physische Taste L,
Kollisions-Freiheit, L ≠ F1/H). test_gui_smoke +21 Checks am ECHTEN main:
Start AUS · Undo/Rebuild bleibt AUS (Root-Cause-Regression) · F1 ein →
F2/F3/F4 aus (synchron, 0 Frames Poll) · L-Fix an/aus inkl. Button-Sync
und Statusmeldungen · Button-Weg ditto.
Suite 11/11 ALL OK: ux 137, shortcuts 203, editor_svmap 31, terrain 112,
library 94, glb_view 28, spawns 52, testrun 14, bauen 87, gui_smoke 89,
rmb_vorrang 32.
2026-10-17 18:24:45 +00:00

87 lines
4.1 KiB
GDScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

extends RefCounted
## Kurzhilfe-Overlay (Karte t_11b5c25b, Karte 3/3) — H schaltet das Panel an,
## H/Esc aus. Der Text spiegelt docs/tasten.md (Source of truth der Shortcut-
## Karten) als Kompakt-Tabelle für den Editor-Bildschirm. Bei neuen Tasten:
## docs/tasten.md UND hier pflegen.
##
## BBCode-Tabelle ([table=2]): Taste | Wirkung. Bei neuen Tasten die Zeile in
## der passenden Sektion ergänzen (text() aufbauen, _rows() macht die Zellen).
static func text() -> String:
var out := ""
out += _header("Navigation (Kamera)")
out += _table(_rows([
["Mittlere Maustaste ziehen", "Orbit: um die Karte drehen"],
["Mittlere Maustaste + Umschalt ziehen", "Pan: Karte verschieben"],
["Mausrad", "Zoom (aus, während ein Objekt gedreht wird)"],
["Rechte Maustaste GEDACHT halten", "Freelook-Flug: Umsehen + W vor / S zurück / A links / D rechts; Leertaste hoch / Shift runter (Shooter-Konvention) — funktioniert in JEDEM Werkzeug (Terrain, Bauen, Platzieren), die rechte Maustaste hat immer Vorrang"],
["Strg halten (im Flug)", "schneller fliegen (×3)"],
["Alt halten (im Flug)", "langsamer fliegen (×0,3)"],
["Mausrad (im Flug)", "Grundgeschwindigkeit dauerhaft ändern (2–300 m/s)"],
["Umschalt+F", "Flugmodus dauerhaft an/aus"],
["F", "Auswahl ins Bild zentrieren"],
]))
out += _header("Auswahl")
out += _table(_rows([
["Linksklick", "Objekt auswählen (ersetzt die Auswahl)"],
["Strg+Klick (Viewport + Baum)", "Objekt zur Auswahl hinzufügen/entfernen (Mehrfachauswahl)"],
["Umschalt+Klick", "wie Strg+Klick (Mehrfachauswahl umschalten)"],
["Ziehen über leeren Boden", "Rahmen aufziehen: alle Objekte im Rahmen wählen"],
["Umschalt + Rahmen", "Rahmen-Auswahl zur bestehenden Auswahl hinzufügen"],
["Esc", "Werkzeug abbrechen → Greifen zurückrollen → Ghost abbrechen → Auswahl aufheben"],
["G", "Auswahl greifen (hängt an der Maus; Klick setzt, Esc rollt zurück)"],
]))
out += _header("Objekt-Manipulation")
out += _table(_rows([
["R", "90° drehen (Umschalt+R = −90°, ganze Gruppe dreht mit; Mausrad: 15° fein)"],
["Pfeiltasten", "Auswahl im 2-m-Raster verschieben (Kamera-nächste Weltachse)"],
["Bild↑ / Bild↓", "+0,25 m / −0,25 m anheben/absenken"],
["Strg+Bild↑", "Auswahl aufs Terrain/Boden absetzen"],
["Strg halten", "temporärer Snap-Zwang (rastet auf ganze Meter)"],
["Strg+D", "Auswahl duplizieren (+2 m versetzt)"],
["Entf", "Auswahl sofort löschen (Strg+Z holt zurück)"],
["Strg+G / Strg+Umschalt+G", "Gruppieren / Gruppe lösen"],
]))
out += _header("Terrain-Werkzeug (F1)")
out += _table(_rows([
["1 / 2 / 3 / 4", "Pinselmodus: Heben / Senken / Glätten / Malen"],
["[ / ]", "Pinselgröße: Klein (4 m) / Mittel (12 m) / Groß (32 m) zyklisch"],
["Linksklick-Ziehen", "Boden formen bzw. malen"],
["Strg+Linksklick-Ziehen", "Gegenteil: senken (bei Heben) / heben (bei Senken) / Gras zurückmalen"],
]))
out += _header("Datei & Undo")
out += _table(_rows([
["Strg+Z", "Rückgängig"],
["Strg+Y oder Strg+Umschalt+Z", "Wiederherstellen (Redo)"],
["Strg+S", "Map speichern (.svmap, bekannter Pfad)"],
["Strg+Umschalt+S", "Map speichern unter …"],
["Strg+O", "Map öffnen"],
["Strg+N", "Neue Map"],
]))
out += _header("Werkzeuge & Tests")
out += _table(_rows([
["F1", "Werkzeug: Terrain formen"],
["F2", "Werkzeug: Objekte platzieren/auswählen"],
["F3", "Werkzeug: Bauen (Häuser)"],
["F4", "Werkzeug: Spawn-Zonen malen"],
["F5", "▶ Karte testen"],
["H", "Diese Kurzhilfe an/aus (Esc schließt auch)"],
["L", "Höhenlinien FIXIEREN (immer sichtbar/unsichtbar) — ohne Fix erscheinen sie nur im Terrain-Werkzeug (F1)"],
]))
out += "[color=#a8b6ad]Vor „Neue Map“ und „Öffnen“ fragt der Editor nach, wenn noch ungespeicherte Änderungen da sind. Die Statuszeile unten zeigt immer das aktive Werkzeug.[/color]\n"
return out
static func _header(title: String) -> String:
return "\n[color=#8cc9f2][b]%s[/b][/color]\n\n" % title
static func _table(rows: String) -> String:
return "[table=2]%s[/table]\n" % rows
static func _rows(pairs: Array) -> String:
var out := ""
for pair in pairs:
out += "[cell][b]%s[/b][/cell][cell]%s[/cell]" % [str(pair[0]), str(pair[1])]
return out