Complete remaining client gap features

This commit is contained in:
shenlei
2026-09-04 13:25:05 +09:00
parent 13ccb8d02d
commit 9a4a044da5
47 changed files with 6667 additions and 140 deletions
+69
View File
@@ -0,0 +1,69 @@
# pick_show_test —— §8.8 / §5.4 game.py OnRender「Picking」块分派 1:1
# IsPickedWindow 门、chr.Pick() 强显、targetBoard 强显、去重、__IsShowName() 分叉
# (非总显名字 -> item.Pick;总显名字 -> ShowAllTextTail + textTail.Pick)、
# SelectItemName 门。
# godot --headless --path project --script pick_show_test.gd
# 退出码 0 = 全过。
extends SceneTree
const PickShow = preload("res://pick_show.gd")
var _fail := 0
func _ck(c: bool, m: String) -> void:
if not c:
_fail += 1
printerr("FAIL: " + m)
func _init() -> void:
_run()
if _fail == 0:
print("PASS: pick_show_test (§8.8/§5.4 OnRender Picking 分派 1:1)")
quit(0)
else:
printerr("%d check(s) failed" % _fail)
quit(1)
func _run() -> void:
var NP := PickShow.NO_PICK
_ck(NP == -1, "NO_PICK == -1")
# --- 0. char_pick_activegame.py:1533------------------------------------
_ck(PickShow.char_pick_active(true) == true, "鼠标在窗口 -> chr.Pick() 跑")
_ck(PickShow.char_pick_active(false) == false, "鼠标不在窗口 -> chr.Pick() 不跑")
# --- 1. forced_name_vids:1533..:1540 ShowCharacterTextTail 集合)--------
# 不在窗口 -> 空(连 target 强显也不做,参考里都在 :1533 门内)
_ck(PickShow.forced_name_vids(false, 2000, 1500) == [], "不在窗口 -> 无强显")
# 悬停命中 + 有目标框 -> 两个都强显,顺序 [hover, target]
_ck(PickShow.forced_name_vids(true, 2000, 1500) == [2000, 1500], "悬停+目标 -> [hover, target]")
# 只悬停命中
_ck(PickShow.forced_name_vids(true, 2000, 0) == [2000], "只悬停 -> [hover]")
# 只有目标框
_ck(PickShow.forced_name_vids(true, NP, 1500) == [1500], "只目标框 -> [target]")
_ck(PickShow.forced_name_vids(true, 0, 1500) == [1500], "hover=0 视为无 -> [target]")
# 悬停的正是目标 -> 去重
_ck(PickShow.forced_name_vids(true, 1500, 1500) == [1500], "悬停==目标 -> 去重成一个")
# 啥也没有
_ck(PickShow.forced_name_vids(true, NP, 0) == [], "在窗口但无命中无目标 -> 空")
# --- 2. should_pick_item:1543----------------------------------------
_ck(PickShow.should_pick_item(true, false) == true, "在窗口 且 非总显名字 -> item.Pick()")
_ck(PickShow.should_pick_item(true, true) == false, "总显名字 -> 不走 item.Pick()")
_ck(PickShow.should_pick_item(false, false) == false, "不在窗口 -> 不走 item.Pick()")
# --- 3. should_show_all_names / should_pick_text_tail:1552 / :1554--
_ck(PickShow.should_show_all_names(true) == true, "总显名字 -> ShowAllTextTail")
_ck(PickShow.should_show_all_names(false) == false, "非总显名字 -> 不 ShowAllTextTail")
_ck(PickShow.should_pick_text_tail(true) == true, "总显名字 -> textTail.Pick()")
_ck(PickShow.should_pick_text_tail(false) == false, "非总显名字 -> 不 textTail.Pick()")
# item 拾取的两条路互斥:非总显名字走 item.Pick,总显名字走 textTail.Pick
for isn in [true, false]:
var via_item := PickShow.should_pick_item(true, isn)
var via_tail := PickShow.should_pick_text_tail(isn)
_ck(via_item != via_tail, "在窗口时 item.Pick 与 textTail.Pick 恰好二选一(is_show_name=%s" % isn)
# --- 4. should_select_item_name:1560------------------------------
_ck(PickShow.should_select_item_name(7) == true, "PickingItemIndex=7 -> SelectItemName")
_ck(PickShow.should_select_item_name(0) == true, "PickingItemIndex=0(有效索引)-> SelectItemName")
_ck(PickShow.should_select_item_name(NP) == false, "PickingItemIndex=-1 -> 不 SelectItemName")