Datei-Menü: Hand-Haltung der Waffen startet das Hand-Haltungs-Tool aus dem Client-Ordner (importiert nach neuem Client-Stand im Hintergrund); Test
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
91c66a0b98
commit
ff1c0e345e
5 changed files with 64 additions and 0 deletions
|
|
@ -93,6 +93,18 @@ static func export_temp_map(doc: Dictionary) -> Dictionary:
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
## Hand-Haltungs-Tool: liegt im Client-Projekt, weil es dessen Rig und Waffen
|
||||||
|
## direkt benutzt (kein VR, eigenes Fenster).
|
||||||
|
static func hand_pose_args(client_dir: String) -> PackedStringArray:
|
||||||
|
return PackedStringArray(["--xr-mode", "off", "--path", client_dir,
|
||||||
|
"res://tools/hand_pose_tool/hand_pose_tool.tscn"])
|
||||||
|
|
||||||
|
|
||||||
|
## Import-Lauf für den Client, nötig nach neuem Stand (neue Modelle/Skripte).
|
||||||
|
static func import_args(client_dir: String) -> PackedStringArray:
|
||||||
|
return PackedStringArray(["--headless", "--path", client_dir, "--import"])
|
||||||
|
|
||||||
|
|
||||||
## Argumentliste für den Client-Start (getestet: exakt diese Form).
|
## Argumentliste für den Client-Start (getestet: exakt diese Form).
|
||||||
static func launch_args(client_dir: String, map_path: String) -> PackedStringArray:
|
static func launch_args(client_dir: String, map_path: String) -> PackedStringArray:
|
||||||
return PackedStringArray(["--path", client_dir, "--", "--testmap", map_path, "--mock-master"])
|
return PackedStringArray(["--path", client_dir, "--", "--testmap", map_path, "--mock-master"])
|
||||||
|
|
|
||||||
|
|
@ -76,6 +76,7 @@ static func text() -> String:
|
||||||
["Strg+Y / Strg+Umschalt+Z", "Wiederherstellen"],
|
["Strg+Y / Strg+Umschalt+Z", "Wiederherstellen"],
|
||||||
["Strg+S / Strg+Umschalt+S", "Speichern / Speichern unter"],
|
["Strg+S / Strg+Umschalt+S", "Speichern / Speichern unter"],
|
||||||
["Strg+O / Strg+N", "Öffnen / Neue Map"],
|
["Strg+O / Strg+N", "Öffnen / Neue Map"],
|
||||||
|
["Datei → Hand-Haltung der Waffen", "öffnet das Tool für Hände und Finger pro Waffe (eigenes Fenster)"],
|
||||||
["Datei → Updates prüfen", "prüft auf eine neue Version; Banner „Jetzt updaten“ lädt und startet neu"],
|
["Datei → Updates prüfen", "prüft auf eine neue Version; Banner „Jetzt updaten“ lädt und startet neu"],
|
||||||
]))
|
]))
|
||||||
return out
|
return out
|
||||||
|
|
|
||||||
|
|
@ -166,6 +166,7 @@ var update_btn: Button # „Jetzt updaten“ im Banner
|
||||||
var check_thread: Thread # Update-Check im Hintergrund (Start/Menü)
|
var check_thread: Thread # Update-Check im Hintergrund (Start/Menü)
|
||||||
var update_thread: Thread # Update-Ausführung (pull + Import-Lauf)
|
var update_thread: Thread # Update-Ausführung (pull + Import-Lauf)
|
||||||
var _update_check_busy := false
|
var _update_check_busy := false
|
||||||
|
var _hand_pose_thread: Thread = null
|
||||||
var _update_running := false
|
var _update_running := false
|
||||||
var _update_result: Dictionary = {} # letzter Check (Status/Banner-Nachfrage)
|
var _update_result: Dictionary = {} # letzter Check (Status/Banner-Nachfrage)
|
||||||
|
|
||||||
|
|
@ -794,6 +795,8 @@ func _on_menu_action(id: int) -> void:
|
||||||
_open_resize_dialog()
|
_open_resize_dialog()
|
||||||
7: # Updates prüfen (Selbst-Update, t_d95f087a)
|
7: # Updates prüfen (Selbst-Update, t_d95f087a)
|
||||||
_on_update_check_menu()
|
_on_update_check_menu()
|
||||||
|
8: # Hand-Haltung der Waffen (Tool im Client-Projekt)
|
||||||
|
_on_hand_pose_tool()
|
||||||
|
|
||||||
|
|
||||||
# --------------------------------------------- UI-Größe + Fenster (t_297221b5) --
|
# --------------------------------------------- UI-Größe + Fenster (t_297221b5) --
|
||||||
|
|
@ -1021,6 +1024,50 @@ func _startup_update_check() -> void:
|
||||||
_updater_check_async(false)
|
_updater_check_async(false)
|
||||||
|
|
||||||
|
|
||||||
|
## Hand-Haltungs-Tool starten: eigenes Fenster aus dem Client-Projekt. Nach einem
|
||||||
|
## neuen Client-Stand erst importieren (im Hintergrund, kann dauern), sonst fehlen
|
||||||
|
## dem Tool neue Modelle.
|
||||||
|
func _on_hand_pose_tool() -> void:
|
||||||
|
if _hand_pose_thread != null:
|
||||||
|
_set_status("Hand-Haltungs-Tool wird schon vorbereitet…")
|
||||||
|
return
|
||||||
|
var cfg := TestRun.load_cfg()
|
||||||
|
var client := TestRun.find_client(ProjectSettings.globalize_path("res://"), cfg)
|
||||||
|
if client.is_empty():
|
||||||
|
_set_status("Client-Ordner nicht gefunden: er muss neben dem Editor liegen (scopedvr-client) oder in den Einstellungen stehen.", true)
|
||||||
|
return
|
||||||
|
var godot := TestRun.find_godot(cfg)
|
||||||
|
if godot.is_empty():
|
||||||
|
_set_status("Godot nicht gefunden: bitte in den Einstellungen eintragen.", true)
|
||||||
|
return
|
||||||
|
_set_status("Hand-Haltungs-Tool wird vorbereitet…")
|
||||||
|
_hand_pose_thread = Thread.new()
|
||||||
|
_hand_pose_thread.start(_hand_pose_prepare.bind(godot, client))
|
||||||
|
|
||||||
|
|
||||||
|
func _hand_pose_prepare(godot: String, client: String) -> void:
|
||||||
|
var head := EditorUpdater.git_run(EditorUpdater.git_exe(TestRun.load_cfg()), client, PackedStringArray(["rev-parse", "HEAD"]))
|
||||||
|
var stand := str(head.get("output", "")).strip_edges()
|
||||||
|
var cfg := TestRun.load_cfg()
|
||||||
|
if stand.is_empty() or str(cfg.get_value("test", "hand_pose_import", "")) != stand:
|
||||||
|
var out: Array = []
|
||||||
|
OS.execute(godot, TestRun.import_args(client), out, true)
|
||||||
|
_hand_pose_started.call_deferred(godot, client, stand)
|
||||||
|
|
||||||
|
|
||||||
|
func _hand_pose_started(godot: String, client: String, stand: String) -> void:
|
||||||
|
_hand_pose_thread.wait_to_finish()
|
||||||
|
_hand_pose_thread = null
|
||||||
|
var cfg := TestRun.load_cfg()
|
||||||
|
cfg.set_value("test", "hand_pose_import", stand)
|
||||||
|
cfg.save(TestRun.CFG_PATH)
|
||||||
|
var pid := OS.create_process(godot, TestRun.hand_pose_args(client))
|
||||||
|
if pid <= 0:
|
||||||
|
_set_status("Hand-Haltungs-Tool ließ sich nicht starten.", true)
|
||||||
|
return
|
||||||
|
_set_status("Hand-Haltungs-Tool läuft in einem eigenen Fenster.")
|
||||||
|
|
||||||
|
|
||||||
## Datei-Menü „🔄 Updates prüfen“ (ID 7): gleicher Check mit Ergebnis-Meldung.
|
## Datei-Menü „🔄 Updates prüfen“ (ID 7): gleicher Check mit Ergebnis-Meldung.
|
||||||
func _on_update_check_menu() -> void:
|
func _on_update_check_menu() -> void:
|
||||||
if _update_check_busy:
|
if _update_check_busy:
|
||||||
|
|
|
||||||
|
|
@ -56,6 +56,7 @@ func build() -> void:
|
||||||
popup.add_separator()
|
popup.add_separator()
|
||||||
popup.add_item("▶ Karte testen", 5)
|
popup.add_item("▶ Karte testen", 5)
|
||||||
popup.add_separator()
|
popup.add_separator()
|
||||||
|
popup.add_item("🖐 Hand-Haltung der Waffen…", 8)
|
||||||
popup.add_item("🔄 Updates prüfen", 7)
|
popup.add_item("🔄 Updates prüfen", 7)
|
||||||
popup.add_item("Beenden", 4)
|
popup.add_item("Beenden", 4)
|
||||||
# FIX 20.10. (Sly-Befund „Kartengröße ändern tut nichts“): id_pressed sendet
|
# FIX 20.10. (Sly-Befund „Kartengröße ändern tut nichts“): id_pressed sendet
|
||||||
|
|
|
||||||
|
|
@ -118,3 +118,6 @@ func _run_tests() -> void:
|
||||||
if str(args[i]) != want[i]:
|
if str(args[i]) != want[i]:
|
||||||
ok = false
|
ok = false
|
||||||
_check(ok, "launch_args exakt: --path … -- --testmap … --mock-master")
|
_check(ok, "launch_args exakt: --path … -- --testmap … --mock-master")
|
||||||
|
var hp := TestRun.hand_pose_args("/pfad/client")
|
||||||
|
_check(Array(hp) == ["--xr-mode", "off", "--path", "/pfad/client", "res://tools/hand_pose_tool/hand_pose_tool.tscn"],
|
||||||
|
"hand_pose_args exakt: ohne VR, Szene aus dem Client")
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue