Implement playable Mac client and rendering validation

This commit is contained in:
shen
2026-09-11 14:58:22 +08:00
parent 1ab68bd06e
commit 374d4165d8
233 changed files with 6546 additions and 284 deletions
+42
View File
@@ -0,0 +1,42 @@
extends SceneTree
const PlayerView = preload("res://ui/player_view.gd")
const Anchor = preload("res://fx/target_effect_anchor.gd")
var failures := 0
func check(ok: bool, label: String) -> void:
if not ok:
failures += 1
printerr("FAIL: " + label)
func _init() -> void: call_deferred("run")
func run() -> void:
var old_mode := OS.get_environment("MTGODOT_GPUSKIN")
var centers := {}
for mode in ["0", "1"]:
OS.set_environment("MTGODOT_GPUSKIN", mode)
for race in 8:
var view := PlayerView.new()
check(view.build(AssetRoot.path(), race), "race builds")
root.add_child(view)
view.anim.set_process(false)
view.anim.set_time(0)
var result: Dictionary = view.model.get_fly_target_bounds()
check(result.valid, "source bone OBBs parsed race=%d mode=%s" % [race, mode])
var bounds: AABB = result.bounds
check(bounds.size.is_finite() and bounds.size.length() > 50, "nonempty cm bounds")
var center: Vector3 = Anchor.fly_target_position(view)
check(center.distance_to(view.model.to_global(bounds.get_center())) < 0.00001, "source centre transforms once")
if mode == "0": centers[race] = center
else: check(center.distance_to(centers[race]) < 0.0001, "CPU/GPU target centres match")
var extra := MeshInstance3D.new()
extra.mesh = BoxMesh.new()
extra.position = Vector3(1000, 1000, 1000)
view.add_child(extra)
view.set_anim_state("attack")
view.anim.set_time(0.3)
check(Anchor.fly_target_position(view).distance_to(center) < 0.00001, "cached body sphere excludes attachments and later poses")
view.position = Vector3(5, 2, -3)
check(Anchor.fly_target_position(view).distance_to(center + view.position) < 0.00001, "cached local sphere follows actor translation")
view.free()
OS.set_environment("MTGODOT_GPUSKIN", old_mode)
await process_frame
print("fly_target_bounds_test: failures=%d" % failures)
quit(1 if failures else 0)