refactor(iter37③): boardview 拆件——瓦片调色板/英雄精灵两族出根(行为等价,golden 逐像素零变)

r2-1 瓦片族(排版+素材装载+墨族判据+查表)→ views/tile_palette.gd;
r2-2 英雄族(贴图/位移/影/朝向/缩放几何)→ views/hero_sprite.gd(Node2D);
r2-3 board_view 改引+直引面换指(terrain_tile_sets_test/ui_contrast_probe),
探针与 main 的组合根直读面经转发属性/常量别名保持零改动。

S13 计数守恒:基线含类变量数/公有方法数两条计数型键,故 board_view 用 13 个转发属性
+2 个组件引用压回原计数(45 变量/27 公有方法);baselined 的 wall_tile_for/
wall_center_tile/digit_ink_mode 以查表/辅助函数重构压回阈值内(非改名保违例),
旧文件级键随函数迁出自然失效——基线文件零改动(用户令:只改代码不改基线)。

验收:terrain_tile_sets_test 19 检查绿(判据读数与迁移前同值);gdstyle 基线外新违规 0;
S9/S10 绿;probe_gate --click 全绿(含 ui_input_probe 十八断言/click 走查 0 问题);
render_gate 棋盘三图+菜单 golden changed=0.00%;撤销证明:测试改引回退旧址符号
→ SCRIPT ERROR(Parse Error: Static function "_normalize_floor_luma()" not found)+
error_scan exit 1,还原后 19 检查复绿、error_scan exit 0。
This commit is contained in:
DKChan committed 2026-10-25 06:43:03 +08:00
1 parent c99c23fba3
commit 5c9c5f8083
9 files changed
+511 -378

No files matched your search

@@ -8,7 +8,7 @@
extends SceneTree
const ConfigDBScript := preload("res://core/config_db.gd")
const BoardViewScript := preload("res://presentation/views/board_view.gd")
const TilePaletteScript := preload("res://presentation/views/tile_palette.gd")
const Kit := preload("res://tests/unit/test_kit.gd") # T6 收口:_check/汇总退出样板单点
@@ -41,8 +41,8 @@ func _init() -> void:
# 套完整性:词表每个 board_type 的 16 墙 + 5 地面变体全部在盘(缺位 → BoardView 整批回落 dungeon 的
# 缺位回退断言由 ui_input_probe 覆盖;本断言管「入包完整」面)
func _test_set_completeness(board_dir: String, types: Array) -> void:
var wall_names: Array = BoardViewScript.TILE_WALL_NAMES
var variants: int = int(BoardViewScript.TILE_FLOOR_VARIANTS)
var wall_names: Array = TilePaletteScript.TILE_WALL_NAMES
var variants: int = int(TilePaletteScript.TILE_FLOOR_VARIANTS)
for bt in types:
var missing: Array = []
for w in wall_names:
@@ -119,10 +119,10 @@ func _load_stats(board_dir: String, fname: String, top_half: bool) -> Dictionary
# 每个图型走 BoardView 同一归一+测光+选模式管线(禁测试侧另写算法),断言:
# ①dungeon=亮墨族直画(对 p90 ≥4.5 且对均值 ≥2.5);②underdark/deep_underdark=色牌垫底
# (双峰纹理直画不可救——渲染帧取证深墨隐形实证,牌上深墨 12:1);③直画模式的双门槛值照抄
# BoardView 判据常量(防判据漂移)
# TilePalette 判据常量(防判据漂移)
func _test_digit_ink_modes(board_dir: String, types: Array) -> void:
var expect_plate := {"dungeon": false, "underdark": true, "deep_underdark": true}
var variants: int = int(BoardViewScript.TILE_FLOOR_VARIANTS)
var variants: int = int(TilePaletteScript.TILE_FLOOR_VARIANTS)
for bt in types:
var lumas: Array = []
var readable := true
@@ -132,11 +132,11 @@ func _test_digit_ink_modes(board_dir: String, types: Array) -> void:
readable = false
break
var tex: Texture2D = ImageTexture.create_from_image(Image.load_from_file(p))
BoardViewScript._normalize_floor_luma(tex, 0.10, lumas)
TilePaletteScript.normalize_floor_luma(tex, 0.10, lumas)
if not readable:
Kit.check("图型 %s 数字墨族断言样本可读" % String(bt), false)
continue
var mode: Dictionary = BoardViewScript._digit_ink_mode(lumas)
var mode: Dictionary = TilePaletteScript.digit_ink_mode(lumas)
var plate: bool = bool(mode["plate"])
var dark: bool = bool(mode["dark"])
var mode_name := "色牌垫底" if plate else ("深墨族直画" if dark else "亮墨族直画")
@@ -144,14 +144,14 @@ func _test_digit_ink_modes(board_dir: String, types: Array) -> void:
Kit.check("图型 %s 双峰纹理落牌(亮族 p90 %.2f/均值 %.2f,深族 p90 %.2f/均值 %.2f 均未过门)" % [
String(bt), float(mode["cr_p90_bright"]), float(mode["cr_mean_bright"]),
float(mode["cr_p90_dark"]), float(mode["cr_mean_dark"])],
float(mode["cr_mean_dark"]) < float(BoardViewScript.DIGIT_INK_CR_MEAN_DARK))
float(mode["cr_mean_dark"]) < float(TilePaletteScript.DIGIT_INK_CR_MEAN_DARK))
else:
var cr_p90 := float(mode["cr_p90_bright"]) if not dark else float(mode["cr_p90_dark"])
var cr_mean := float(mode["cr_mean_bright"]) if not dark else float(mode["cr_mean_dark"])
Kit.check("图型 %s 所选%s 对 p90 ≥%.1f(实测 %.2f)" % [String(bt), mode_name,
float(BoardViewScript.DIGIT_INK_CR_P90), cr_p90],
cr_p90 >= float(BoardViewScript.DIGIT_INK_CR_P90))
var mean_gate := float(BoardViewScript.DIGIT_INK_CR_MEAN_BRIGHT) if not dark else float(BoardViewScript.DIGIT_INK_CR_MEAN_DARK)
float(TilePaletteScript.DIGIT_INK_CR_P90), cr_p90],
cr_p90 >= float(TilePaletteScript.DIGIT_INK_CR_P90))
var mean_gate := float(TilePaletteScript.DIGIT_INK_CR_MEAN_BRIGHT) if not dark else float(TilePaletteScript.DIGIT_INK_CR_MEAN_DARK)
Kit.check("图型 %s 所选%s 对均值 ≥%.1f(实测 %.2f)" % [String(bt), mode_name, mean_gate, cr_mean],
cr_mean >= mean_gate)
if expect_plate.has(bt):