Files
mtgodot-poc/project/net_world_main_switch_test.gd
T
shenandshen c93894313a fix: 装备属性面板避让逻辑 + 多项功能更新
- item_tooltip_view.gd: 新增 avoid_rect 属性,tooltip 与装备窗口重叠时自动推到左侧
- inventory_ui.gd: 悬停装备时传入窗口矩形作为避让区域
- 包含其他累积的功能开发和测试文件
2026-09-21 16:38:59 -07:00

64 lines
2.2 KiB
GDScript

# net_world_main_switch_test —— 40250 CNetworkActorManager::SetMainActorVID
# 的主角色切换边界:旧 live actor、目标、悬停、HP/动作临时状态不能跨 VID 残留。
extends SceneTree
const NetWorld = preload("res://net_world.gd")
const FakeClient = preload("res://net_client_fake.gd")
var _fail := 0
func _ck(ok: bool, message: String) -> void:
if not ok:
_fail += 1
printerr("FAIL: " + message)
func _init() -> void:
await _run()
if _fail == 0:
print("PASS: net_world_main_switch_test (SetMainActorVID cleanup)")
quit(0)
else:
printerr("%d check(s) failed" % _fail)
quit(1)
func _run() -> void:
var mount := Node3D.new()
var client := FakeClient.new()
var world: Node = NetWorld.new()
get_root().add_child(mount)
get_root().add_child(client)
get_root().add_child(world)
world.setup(client, mount)
world.set_model_factory(func(_d: Dictionary) -> Node3D: return Node3D.new())
client.entities[1000] = {"vid": 1000, "name": "old-main", "race": 0,
"kind": 0, "ch_type": 0, "pos": Vector3.ZERO,
"pos_cm": Vector3.ZERO, "hp": 100, "max_hp": 100, "dead": false}
client.entities[2000] = {"vid": 2000, "name": "old-remote", "race": 101,
"kind": 2, "ch_type": 2, "pos": Vector3(1, 0, 0),
"pos_cm": Vector3(100, 0, 0), "hp": 100, "max_hp": 100, "dead": false}
client.main = 1000
world._main_vid = 1000
world._on_spawn(client.entities[2000])
_ck(world.node_for(2000) != null, "old main lifecycle has a visible remote actor")
world.set_target_vid(2000)
world.set_hover_vid(2000)
world._sync_push[2000] = {"serial": 1}
world._push[2000] = {"offset": Vector2.ONE}
world._damage_queue.append({"vid": 2000, "amount": 1})
world._chat_tails[2000] = {"text": "old", "name_flag": false}
world._on_main_set(3000)
_ck(world._main_vid == 3000, "new main VID is registered")
_ck(world._by_vid.is_empty(), "main switch clears old live actor nodes")
_ck(world._target_vid == 0 and world._hover_vid == 0,
"main switch clears target and hover references")
_ck(world._sync_push.is_empty() and world._push.is_empty()
and world._damage_queue.is_empty() and world._chat_tails.is_empty(),
"main switch clears transient actor presentation state")
world.free()
client.free()
mount.free()
await process_frame