营地场景重排接线(落表): 十层新矩形——围墙 (0,220,1280,200)、大门 240×138 底压墙底 (520,282)、告示板 (845,241)、其余六件按 2026-11-05 裁定落位(wall_band 同步 (0,220,1280,200)、schema 默认与注释同步); 围墙件换代 1280×164(柱尖补全+墙脚入土缺口, 12 色零新增); 单测追加 5 条钉值断言(围墙/门扇/告示板/围墙带/六件落位)+oracle 行锚; 设计文档同步 camp-scene-prompts v1.9(§2.2/§2.3/§3/§5 第12条)、art-bible v3.48 §6.2(显示矩形+入土线)、camp.md 第29行; 需求卡片成立(两轮独立复核 24 发现全处置, 复核记录在卡内); 待办条目推进 美术设计已闭合+已写卡。凭据: 营地单测 exit=0(V14 全绿含新钉值)、冒烟测试 PASS(15 项 0 失败)、色板闸围墙 12 色零新增、path_check 0、流水线闸 PASS

This commit is contained in:
DKChan committed 2026-11-07 18:37:58 +08:00
1 parent 166114e094
commit 54f9f23342
11 files changed
+209 -35

No files matched your search

@@ -0,0 +1 @@
uid://c50sjeyp58jcj
@@ -2,7 +2,7 @@ extends SceneTree
# 营地场景布局数据件校验套件(V14——camp_scene_layout.tres 加载期 fail-fast 判据+七命中区几何红线机检)
# 覆盖:校验函数通过(键唯一/贴图在画布/命中成对/围墙带包络)· 七可点件键集 · 两两不相交 ·
# 不越画面 · 不侵顶栏禁区 · 篝火命中只取下半(关系谓词)· 门扇对齐门洞缺口 · 布告板挂围墙带。
# 断言全部为表内关系谓词——禁坐标字面量(数值单一事实源 = 数据行本表)。
# 断言以表内关系谓词为主;2026-11-07 重排追加十层钉值断言(钉值出处见各断言前 oracle 注)。
# 运行:godot --headless --path game --script res://tests/unit/presentation/camp_scene_layout_test.gd(expect 0)
const Kit := preload("res://tests/unit/test_kit.gd")
@@ -85,6 +85,32 @@ func _test_layout_hotspot_geometry() -> void:
and board.hotspot.position.y >= wall.texture_rect.position.y \
and board.hotspot.position.y <= wall.texture_rect.end.y
Kit.check("V14 布告板命中挂围墙带〔营地图批 V14〕", board_ok)
# oracle: design/art/camp-scene-prompts.md:250 (2026-11-07 围墙/门/板钉值,§5 第 12 条)
Kit.check("V14 围墙矩形钉值 (0,220,1280,200)〔营地图批 V14〕",
wall != null and wall.texture_rect == Rect2(0, 220, 1280, 200))
Kit.check("V14 门扇矩形钉值 (520,282,240,138)〔营地图批 V14〕",
gate != null and gate.texture_rect == Rect2(520, 282, 240, 138))
Kit.check("V14 告示板矩形钉值 (845,241,130,121)〔营地图批 V14〕",
board != null and board.texture_rect == Rect2(845, 241, 130, 121))
Kit.check("V14 围墙带钉值 (0,220,1280,200)〔营地图批 V14〕",
table.wall_band == Rect2(0, 220, 1280, 200))
# oracle: design/art/camp-scene-prompts.md:244 (其余七件落位:帐篷:242/笔记本:243/宝箱与其余上移:244)
var seven_ok := true
var seven_bad := ""
for spec in table.layers:
var want: Rect2
match String(spec.key):
"dummy": want = Rect2(340, 474, 120, 180)
"forge": want = Rect2(40, 421, 240, 193)
"tent": want = Rect2(982, 335, 251, 170)
"chest": want = Rect2(1097, 654, 106, 90)
"notebook": want = Rect2(870, 515, 100, 66)
"campfire": want = Rect2(560, 525, 160, 149)
_: continue
if spec.texture_rect != want:
seven_ok = false
seven_bad = "%s %s" % [spec.key, spec.texture_rect]
Kit.check("V14 六件落位钉值(违例 %s)〔营地图批 V14〕" % seven_bad, seven_ok)
# 层序结构:10 层且 bg/wall 压前两位(z0/z1——子节点序=表序先验)
var order_ok := table.layers.size() == 10 \
and String(table.layers[0].key) == "bg" and String(table.layers[1].key) == "wall"
@@ -0,0 +1 @@
uid://cju0edupimvup