iter43-卡1:战斗一屏样张批:五项实装定值落码——血条填充#A8321F经UiKit.HP_BAR_FILL(§4.2语义物件,#689CE8退役值零残留)/条底收HP_BAR_TRACK/顺位徽标提档FS_HINT/护甲三键换24×24 PNG(UiKit.TEX_ARMOR_*单点,缺位回退字形)/名字行垫HP_BAR_BACK素底牌且基线上移地台顶上方(§6.1/§7.2,几何单点_name_plate_rect+name_line_probe扩出口)/地台件TEX_STAGE_PLAZA九宫格横向拉伸接装(缺位回退程序化三段)——样张脚本扩展:draw_base两版画布出口(1280×800基座+1920×1080全局等比1.35×左右黑边96px)/B区按代码252出样/mockup镜像五项定值/S3b色板变体第二套/S5三组关键帧条/S6剪影三语境+描边对照+遮挡对照组/整屏四项断言S1–S4/战斗表现五项P1–P5/A7护甲对比锚/V1两版尺寸/V10基线并排/A5b成稿净空(机检30/30全绿)+--gen-assets四件素材产出入包;新单元套件standee_present_values(V5–V9真实入口断言18条全绿)登记manifest;三枚护甲PNG入包;批件三份落reports(实现报告/反哺点12条/追认单11条);并master合入态订正(迭代41测试债批清偿存量红与tween缺陷)

This commit is contained in:
DKChan committed 2026-10-30 00:00:01 +08:00
1 parent d9e5c019fd
commit 34eba7a332
13 files changed
+966 -112

No files matched your search

@@ -0,0 +1,84 @@
# VERTICAL SLICE - NOT FOR PRODUCTION
# 战斗一屏样张批 V5–V9 断言面(2026-10-29 迭代 43)——五项实装定值的真实入口断言:
# V5 血条填充 = 危险红(UiKit.HP_BAR_FILL 值单点 + 绘制点源码锚:全仓零 #689CE8 与零裸
# Color(0.41,0.61,0.91);条底收 HP_BAR_TRACK 常量);
# V6 站桩名字行垫 HP_BAR_BACK 素底且不压地台(名字行基线 y < 地台顶 y——name_line_probe 几何出口);
# V7 顺位徽标提档 UiKit.FS_HINT(值断言 + 绘制点源码锚,§7.4 清单外 11–13px 提档);
# V8 护甲图标三键(light/ward/heavy)绑对应 24×24 PNG(ResourceLoader 装载结果 + name_line_probe
# 绑定面);
# V9 地台件 scene_stage_plaza.png + 护甲三枚入包可加载且尺寸 48×12 / 24×24(§5.2/§5.3 工单)。
# headless 无渲染面:像素采样以常量单点 + 源码锚 + 探针几何承载(观测面注记,验收对照表 V5 行)。
# 运行:godot --headless --path game --script res://tests/unit/presentation/standee_present_values_test.gd(expect 0)
extends SceneTree
const Kit := preload("res://tests/unit/test_kit.gd")
const StandeeBodyScript := preload("res://presentation/views/standee_body.gd")
# 源码锚读面(静态判据——源文件即提交面)
func _read_source(rel_path: String) -> String:
var f := FileAccess.open(rel_path, FileAccess.READ)
if f == null:
return ""
return f.get_as_text()
func _init() -> void:
# ---- V5 血条填充 = 危险红 #A8321F(§4.2 语义物件显式落法) ----
Kit.check("血条填充常量 = 危险红 #A8321F〔样张批 V5〕",
UiKit.HP_BAR_FILL.to_html(false) == "a8321f")
Kit.check("血条条底收常量 HP_BAR_TRACK(视图原裸值原样入册)〔样张批 V5〕",
UiKit.HP_BAR_TRACK.is_equal_approx(Color(0.10, 0.10, 0.11)))
var body_src := _read_source("res://presentation/views/standee_body.gd")
Kit.check("血条绘制点引用 UiKit.HP_BAR_FILL(源码锚)〔样张批 V5〕",
body_src.contains("UiKit.HP_BAR_FILL"))
Kit.check("全源零违例值 #689CE8 与零裸 Color(0.41,0.61,0.91)(源码锚)〔样张批 V5〕",
not body_src.contains("689CE8") and not body_src.contains("689ce8")
and not body_src.contains("0.41, 0.61, 0.91"))
# ---- V6/V8 站桩实例面(名字行几何 + 护甲绑定) ----
var standee: Node2D = StandeeBodyScript.new("enemy")
root.add_child(standee)
standee.set_data({"display_name": "地精", "enemy_id": "goblin", "hp": 3, "max_hp": 3,
"order": 1, "armor_type": "light"})
var nl: Dictionary = standee.name_line_probe()
Kit.check("名字行基线 y < 地台顶 y(文字禁压地台——V6 判据坐标面)〔样张批 V6〕",
float(nl.baseline_y) < float(nl.plinth_top_y))
Kit.check("素底牌底沿 ≤ 地台顶(整行不越地台)〔样张批 V6〕",
Rect2(nl.plate).end.y <= float(nl.plinth_top_y) + 0.01)
Kit.check("名字行素底 = HP_BAR_BACK 深档 #282220(挂载底色口径)〔样张批 V6〕",
Color(nl.plate_color).to_html(false) == "282220")
Kit.check("基线读数与实装几何同源(基线 = 地台顶上方 9px 档:149 < 158)〔样张批 V6〕",
absf(float(nl.baseline_y) - 149.0) < 0.51 and absf(float(nl.plinth_top_y) - 158.0) < 0.51)
# ---- V7 顺位徽标提档 FS_HINT ----
Kit.check("FS_HINT = 14(§7.4 六档)〔样张批 V7〕", UiKit.FS_HINT == 14)
Kit.check("顺位徽标绘制点取 UiKit.FS_HINT(源码锚)〔样张批 V7〕",
body_src.contains("HORIZONTAL_ALIGNMENT_LEFT, -1, UiKit.FS_HINT"))
# ---- V8 护甲图标三键绑 24×24 PNG ----
var armor_paths := {"light": UiKit.TEX_ARMOR_LIGHT, "ward": UiKit.TEX_ARMOR_WARD,
"heavy": UiKit.TEX_ARMOR_HEAVY}
for key: String in armor_paths:
var tex := UiKit.load_tex(armor_paths[key])
Kit.check("护甲 %s 键绑对应 PNG 且 24×24(§5.3 工单)〔样张批 V8〕" % key,
tex != null and tex.get_width() == 24 and tex.get_height() == 24)
var ward_standee: Node2D = StandeeBodyScript.new("enemy")
root.add_child(ward_standee)
ward_standee.set_data({"display_name": "蛛化卓尔精灵", "enemy_id": "drider", "hp": 5, "max_hp": 5,
"order": 1, "armor_type": "ward"})
var nl_ward: Dictionary = ward_standee.name_line_probe()
Kit.check("甲档键 → 纹理路径绑定(name_line_probe 出 armor_icon 路径)〔样张批 V8〕",
bool(nl_ward.armor_tex_bound) and String(nl_ward.armor_icon) == UiKit.TEX_ARMOR_WARD)
# ---- V9 地台件与护甲三枚入包可载且尺寸对 ----
var plaza := UiKit.load_tex(UiKit.TEX_STAGE_PLAZA)
Kit.check("地台件 scene_stage_plaza.png 可加载且 48×12(§5.2 工单)〔样张批 V9〕",
plaza != null and plaza.get_width() == 48 and plaza.get_height() == 12)
for key: String in armor_paths:
var tex9 := UiKit.load_tex(armor_paths[key])
Kit.check("护甲三枚入包(24×24)且路径常量在 UiKit 单点〔样张批 V9〕" if key == "light"
else "护甲三枚入包(24×24)〔样张批 V9〕",
tex9 != null and tex9.get_width() == 24 and tex9.get_height() == 24)
quit(Kit.finish("standee_present_values"))
@@ -0,0 +1 @@
uid://c7a6acc5aici0
@@ -675,8 +675,9 @@ func _smoke_contrast_inks() -> void:
Kit.check("V4 RAP 反馈行 STONE_DEEP 对数据板 %.2f:1 ≥4.5:1" % r_rap, r_rap >= 4.5)
# 消费点源码锚定:新墨在位、旧裸用点清零、语义岗常量不动
var sb_src: String = FileAccess.get_file_as_string("res://presentation/views/standee_body.gd")
Kit.check("V4 顺位徽标①②③ 墨=GOLD_BRIGHT(13px 行原位)",
sb_src.contains("HORIZONTAL_ALIGNMENT_LEFT, -1, 13, UiKit.GOLD_BRIGHT"))
Kit.check("V4 顺位徽标①②③ 墨=GOLD_BRIGHT(FS_HINT 14 提档原位——迭代 43 V7 换代替代,旧裸 13 清零)",
sb_src.contains("HORIZONTAL_ALIGNMENT_LEFT, -1, UiKit.FS_HINT, UiKit.GOLD_BRIGHT")
and not sb_src.contains("-1, 13, UiKit.GOLD_BRIGHT"))
Kit.check("V4 魔法护甲徽标墨=HERO_BLUE_BRIGHT", sb_src.contains("col = UiKit.HERO_BLUE_BRIGHT"))
Kit.check("V4 重甲徽标墨=GOLD_BRIGHT", sb_src.contains("col = UiKit.GOLD_BRIGHT"))
Kit.check("V4 意图蓄力档判据=分档布尔(standee_body:179 CHARGE_SKILL_IDS 判定;旧 GOLD_DEEP 恒不可达判据清零)〔wd2〕",