fix: 装备属性面板避让逻辑 + 多项功能更新
- item_tooltip_view.gd: 新增 avoid_rect 属性,tooltip 与装备窗口重叠时自动推到左侧 - inventory_ui.gd: 悬停装备时传入窗口矩形作为避让区域 - 包含其他累积的功能开发和测试文件
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
# weapon_trace_endpoint_parity_test —— 40250 CWeaponTrace::SetWeaponInstance/Update。
|
||||
#
|
||||
# 参考端先按武器包围盒到骨骼原点的最大距离计算 m_fLength,Update 再沿
|
||||
# 武器局部 Z 轴追加 m_fLength * __GetReachScale();不是取某个 AABB 角点
|
||||
# 作为任意方向的刀尖。
|
||||
extends SceneTree
|
||||
|
||||
const WeaponTrace = preload("res://ui/weapon_trace.gd")
|
||||
|
||||
var _fail := 0
|
||||
|
||||
func _ck(condition: bool, message: String) -> void:
|
||||
if not condition:
|
||||
_fail += 1
|
||||
printerr("FAIL: " + message)
|
||||
|
||||
func _init() -> void:
|
||||
call_deferred("_run")
|
||||
|
||||
func _run() -> void:
|
||||
var host := Node3D.new()
|
||||
root.add_child(host)
|
||||
var weapon := MeshInstance3D.new()
|
||||
var box := BoxMesh.new()
|
||||
box.size = Vector3(0.2, 0.2, 1.6)
|
||||
weapon.mesh = box
|
||||
host.add_child(weapon)
|
||||
|
||||
var trace: Node = WeaponTrace.new()
|
||||
host.add_child(trace)
|
||||
await process_frame
|
||||
_ck(trace.attach_to_weapon(weapon), "weapon geometry resolves")
|
||||
|
||||
var expected := sqrt(0.1 * 0.1 + 0.1 * 0.1 + 0.8 * 0.8)
|
||||
_ck(is_zero_approx(float(trace._tip_local.x)),
|
||||
"reference trace endpoint stays on the local Z axis")
|
||||
_ck(is_zero_approx(float(trace._tip_local.y)),
|
||||
"reference trace endpoint does not use an arbitrary AABB corner direction")
|
||||
_ck(is_equal_approx(float(trace._tip_local.z), expected),
|
||||
"reference endpoint uses max bound distance as m_fLength")
|
||||
|
||||
trace.set_reach_scale(1.5)
|
||||
var scaled_expected := expected * 1.5
|
||||
_ck(is_equal_approx(float(trace._tip_local.z), scaled_expected),
|
||||
"__GetReachScale scales the local endpoint length")
|
||||
|
||||
if _fail == 0:
|
||||
print("PASS: weapon_trace_endpoint_parity_test (bone-axis length + reach scale)")
|
||||
quit(0)
|
||||
else:
|
||||
printerr("%d check(s) failed" % _fail)
|
||||
quit(1)
|
||||
Reference in New Issue
Block a user