合并(营地场景重排接线批): 落表——十层新矩形(围墙 (0,220,1280,200)、大门 240×138 底压墙底 (520,282)、告示板 (845,241)、其余六件按 2026-11-05 裁定)+围墙件换代(1280×164 补尖+墙脚入土, 12 色零新增)+视图 expand_mode 修(门扇 138 高矩形生效)+单测 5 条钉值断言+设计文档三件(camp-scene-prompts v1.9/art-bible v3.48/camp.md)+需求卡片成立(两轮独立复核 24 发现全处置)+实现报告/反哺点两件;待办条目随实现完成整条删除。凭据: 营地单测 exit=0、冒烟 PASS、ui_struct_probe PASS、色板零新增、path_check 0、流水线闸 PASS;冲突续提交路径钩子不触发——前置检查手动补跑、推送手动补做(本仓在册坑)
ci / gates (push) Failing after 8m2s
ci / gates (push) Failing after 8m2s
This commit is contained in:
commit
5f233bac9a
11 files changed
+237
-35
No files matched your search
Binary file not shown.
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 46 KiB |
@@ -6,7 +6,7 @@ extends Resource
|
||||
@export var canvas := Vector2(1280, 800) # 终稿画布(工程档同幅面)
|
||||
@export var hud_band_h := 48 # 顶栏禁区高度(命中不侵)
|
||||
@export var gate_gap := Vector2i(520, 760) # 门洞缺口 x 范围(透出背景层小路,禁填死)
|
||||
@export var wall_band := Rect2(0, 240, 1280, 70) # 围墙带包络(门柱顶 240—桩底 310;围墙贴图须落在其内)
|
||||
@export var wall_band := Rect2(0, 220, 1280, 200) # 围墙带包络(显示矩形 (0,220,1280,200);围墙贴图须落在其内)
|
||||
@export var layers: Array[CampSceneLayerSpec] = []
|
||||
|
||||
|
||||
|
||||
@@ -13,64 +13,64 @@ hotspot_key = &""
|
||||
[sub_resource type="Resource" id="2"]
|
||||
script = ExtResource("2")
|
||||
key = &"wall"
|
||||
texture_rect = Rect2(0, 261, 1280, 49)
|
||||
texture_rect = Rect2(0, 220, 1280, 200)
|
||||
hotspot = Rect2(0, 0, 0, 0)
|
||||
hotspot_key = &""
|
||||
|
||||
[sub_resource type="Resource" id="3"]
|
||||
script = ExtResource("2")
|
||||
key = &"board"
|
||||
texture_rect = Rect2(845, 268, 130, 121)
|
||||
hotspot = Rect2(845, 268, 130, 140)
|
||||
texture_rect = Rect2(845, 241, 130, 121)
|
||||
hotspot = Rect2(845, 241, 130, 140)
|
||||
hotspot_key = &"board"
|
||||
|
||||
[sub_resource type="Resource" id="4"]
|
||||
script = ExtResource("2")
|
||||
key = &"gate"
|
||||
texture_rect = Rect2(520, 250, 240, 211)
|
||||
hotspot = Rect2(520, 250, 240, 220)
|
||||
texture_rect = Rect2(520, 282, 240, 138)
|
||||
hotspot = Rect2(520, 282, 240, 147)
|
||||
hotspot_key = &"gate"
|
||||
|
||||
[sub_resource type="Resource" id="5"]
|
||||
script = ExtResource("2")
|
||||
key = &"dummy"
|
||||
texture_rect = Rect2(340, 520, 120, 180)
|
||||
hotspot = Rect2(340, 520, 120, 180)
|
||||
texture_rect = Rect2(340, 474, 120, 180)
|
||||
hotspot = Rect2(340, 474, 120, 180)
|
||||
hotspot_key = &"dummy"
|
||||
|
||||
[sub_resource type="Resource" id="6"]
|
||||
script = ExtResource("2")
|
||||
key = &"forge"
|
||||
texture_rect = Rect2(40, 467, 240, 193)
|
||||
hotspot = Rect2(40, 420, 240, 240)
|
||||
texture_rect = Rect2(40, 421, 240, 193)
|
||||
hotspot = Rect2(40, 374, 240, 240)
|
||||
hotspot_key = &"forge"
|
||||
|
||||
[sub_resource type="Resource" id="7"]
|
||||
script = ExtResource("2")
|
||||
key = &"tent"
|
||||
texture_rect = Rect2(982, 520, 251, 170)
|
||||
texture_rect = Rect2(982, 335, 251, 170)
|
||||
hotspot = Rect2(0, 0, 0, 0)
|
||||
hotspot_key = &""
|
||||
|
||||
[sub_resource type="Resource" id="8"]
|
||||
script = ExtResource("2")
|
||||
key = &"chest"
|
||||
texture_rect = Rect2(1097, 700, 106, 90)
|
||||
hotspot = Rect2(1085, 700, 130, 90)
|
||||
texture_rect = Rect2(1097, 654, 106, 90)
|
||||
hotspot = Rect2(1085, 654, 130, 90)
|
||||
hotspot_key = &"chest"
|
||||
|
||||
[sub_resource type="Resource" id="9"]
|
||||
script = ExtResource("2")
|
||||
key = &"notebook"
|
||||
texture_rect = Rect2(818, 704, 100, 66)
|
||||
hotspot = Rect2(818, 690, 100, 80)
|
||||
texture_rect = Rect2(870, 515, 100, 66)
|
||||
hotspot = Rect2(870, 501, 100, 80)
|
||||
hotspot_key = &"notebook"
|
||||
|
||||
[sub_resource type="Resource" id="10"]
|
||||
script = ExtResource("2")
|
||||
key = &"campfire"
|
||||
texture_rect = Rect2(560, 571, 160, 149)
|
||||
hotspot = Rect2(560, 640, 160, 80)
|
||||
texture_rect = Rect2(560, 525, 160, 149)
|
||||
hotspot = Rect2(560, 594, 160, 80)
|
||||
hotspot_key = &"campfire"
|
||||
|
||||
[resource]
|
||||
@@ -78,5 +78,5 @@ script = ExtResource("1")
|
||||
canvas = Vector2(1280, 800)
|
||||
hud_band_h = 48
|
||||
gate_gap = Vector2i(520, 760)
|
||||
wall_band = Rect2(0, 240, 1280, 70)
|
||||
wall_band = Rect2(0, 220, 1280, 200)
|
||||
layers = [SubResource("1"), SubResource("2"), SubResource("3"), SubResource("4"), SubResource("5"), SubResource("6"), SubResource("7"), SubResource("8"), SubResource("9"), SubResource("10")]
|
||||
@@ -133,6 +133,7 @@ func _build_layer_node(spec: CampSceneLayerSpec) -> Control:
|
||||
if tex != null:
|
||||
var tr := TextureRect.new()
|
||||
tr.texture = tex
|
||||
tr.expand_mode = TextureRect.EXPAND_IGNORE_SIZE # 允许节点小于贴图原尺寸(门扇 240×211→矩形 138 高)
|
||||
tr.stretch_mode = TextureRect.STRETCH_SCALE
|
||||
node = tr
|
||||
else:
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in new issue
Block a user