iter8-二轮修改批(用户一轮目检四裁决实装):A 互斥确认弹窗化=ConfirmDialog 通用实底确认框(开新冒险/取消两钮,按钮换面 3s 机制退役)+main 三态接线+锁面入列;B 结算框/冒险终局实底面板化=BattleEndOverlay 石板皮面板(墨字判定行/GP 行/按钮列),金蜡封改面板头部静态徽记(坠落演出退役——落点被面板遮挡),纹章环/掸灰/旗收回锚点移屏心(fx 计数断言面不变);C 结算伤害数字突出=明细带 damage 行值放大 17px 朱红独立色(#d9402a——数字即信息主角);D1 退出游戏提级一级菜单(开始菜单与设置并行,设置面内退出移除);D2 设置开关换 UiKit toggle 按钮形态(全屏:开/关 文字随态)——click 探针三段同步(弹窗双路断言/退出层级断言/开关查找器换 Button)——闸:冒烟 596/0+run_all 15 套+六探针全绿 0err

This commit is contained in:
DKChan committed 2026-09-29 23:29:40 +08:00
1 parent 931b7fa8fa
commit 2400dbe49e
9 files changed
+195 -80

No files matched your search

+32 -31
View File
@@ -23,6 +23,9 @@ var _board_rect := Rect2()
func _init() -> void:
# 二轮修改批 B(2026-09-29 用户目检裁决):半透明浮层文字不可读 → 实底石板皮面板形态
#(与营地/设置/图例同族)。半透明氛围 dim 保留(胜利暖纱/失败暮蓝),信息与按钮全部上板;
# 金蜡封 = 面板头部静态徽记(原全屏坠落演出退役——落点被面板遮挡)。
_dim = ColorRect.new()
_dim.color = Color(COL_WARM, 0.0)
_dim.set_anchors_preset(Control.PRESET_FULL_RECT)
@@ -30,33 +33,41 @@ func _init() -> void:
var center := CenterContainer.new()
center.set_anchors_preset(Control.PRESET_FULL_RECT)
_dim.add_child(center)
var panel := PanelContainer.new()
panel.add_theme_stylebox_override("panel", UiKit.panel_skinned(Vector4(16, 14, 16, 14)))
center.add_child(panel)
var box := VBoxContainer.new()
box.custom_minimum_size = Vector2(520, 0)
box.add_theme_constant_override("separation", 12)
center.add_child(box)
_verdict = UiKit.label("", 26, true)
_verdict.add_theme_color_override("font_color", COL_WARM)
panel.add_child(box)
var header := HBoxContainer.new()
header.add_theme_constant_override("separation", 12)
header.alignment = BoxContainer.ALIGNMENT_CENTER
box.add_child(header)
_seal = Panel.new()
_seal.mouse_filter = Control.MOUSE_FILTER_IGNORE
var sb := UiKit.panel_flat(COL_GOLD, UiKit.GOLD_DEEP, 200, 4)
_seal.add_theme_stylebox_override("panel", sb)
_seal.custom_minimum_size = Vector2(34, 34)
_seal.size_flags_vertical = Control.SIZE_SHRINK_CENTER
header.add_child(_seal)
_verdict = UiKit.label("", 24, true)
_verdict.add_theme_color_override("font_color", UiKit.INK_TITLE)
_verdict.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
box.add_child(_verdict)
_verdict.size_flags_vertical = Control.SIZE_SHRINK_CENTER
header.add_child(_verdict)
_gp_line = UiKit.label("", 16, true)
_gp_line.add_theme_color_override("font_color", UiKit.GOLD)
_gp_line.add_theme_color_override("font_color", UiKit.INK_LABEL)
_gp_line.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
_gp_line.visible = false
box.add_child(_gp_line)
box.add_child(HSeparator.new())
_review_btn = UiKit.button("明细回看")
_review_btn.pressed.connect(_emit_review_pressed)
box.add_child(_review_btn)
_btn = UiKit.button("继续")
_btn.pressed.connect(_emit_continue_pressed)
box.add_child(_btn)
# 金蜡封占位(胜利):圆形色块落于扫雷图区中央——位置由 set_board_rect 注入
_seal = Panel.new()
_seal.mouse_filter = Control.MOUSE_FILTER_IGNORE
var sb := UiKit.panel_flat(COL_GOLD, UiKit.GOLD_DEEP, 200, 4)
_seal.add_theme_stylebox_override("panel", sb)
_seal.size = Vector2(72, 72)
_seal.visible = false
_seal.top_level = true
add_child(_seal)
visible = false
@@ -66,14 +77,13 @@ func _init() -> void:
func open_victory(verdict_line: String, continue_label: String, board_rect: Rect2, gp_summary: String = "") -> void:
_dim.color = Color(COL_WARM, 0.28)
_verdict.text = verdict_line
_verdict.add_theme_color_override("font_color", UiKit.INK_ON_GOLD)
_seal.visible = true # 胜利徽记(面板头部静态)
_gp_line.text = gp_summary
_gp_line.visible = gp_summary != ""
_btn.text = continue_label
_board_rect = board_rect
visible = true
_play_seal_fall()
_play_crest_assemble() # 碎砖拼纹章(§2.4——样张 v2 冻结批 T3 终稿)
_play_crest_assemble() # 碎砖拼纹章(§2.4——样张 v2 冻结批 T3 终稿;绕面板屏心环收)
_play_flag_recall(0) # 胜利不放旗收回
@@ -81,11 +91,10 @@ func open_defeat(verdict_line: String, continue_label: String, board_rect: Rect2
# 明度不变的暮蓝色相氛围(全屏唯一暮蓝档——§2.5 最静一拍)
_dim.color = Color(COL_DUSK, 0.45)
_verdict.text = verdict_line
_verdict.add_theme_color_override("font_color", COL_WARM)
_gp_line.visible = false # GP 总量+增量归胜利总结结算(OQ14)——失败侧不呈现
_board_rect = board_rect
visible = true
_seal.visible = false
_seal.visible = false # 失败无徽记(暮蓝氛围)
_play_dust_sadle() # 坐砖掸灰(§2.5——终稿)
_play_flag_recall(8)
@@ -104,16 +113,8 @@ func verdict_text() -> String:
return _verdict.text
# 金蜡封自上落下弹跳定格于棋盘中央(§2.4 克制不狂欢——占位级)
func _play_seal_fall() -> void:
var target := _board_rect.get_center() - _seal.size * 0.5
if _board_rect.size == Vector2.ZERO:
target = get_viewport_rect().size * 0.5 - _seal.size * 0.5
_seal.position = Vector2(target.x, -100.0)
_seal.visible = true
var tw := _seal.create_tween()
tw.tween_property(_seal, "position:y", target.y - 26.0, UiKit.motion(0.42)).set_trans(Tween.TRANS_QUAD).set_ease(Tween.EASE_IN)
tw.tween_property(_seal, "position:y", target.y, UiKit.motion(0.22)).set_trans(Tween.TRANS_BOUNCE).set_ease(Tween.EASE_OUT)
func _fx_center() -> Vector2:
return get_viewport_rect().size * 0.5
# 旗化光点收回(失败——插过的旗逐面化光点收回占位,§2.5)
@@ -147,7 +148,7 @@ var _fx_flag_dots := 0
func _play_crest_assemble() -> void:
_clear_crest_bricks()
_fx_crest_shards = 10
var c := _board_rect.get_center() if _board_rect.size != Vector2.ZERO else get_viewport_rect().size * 0.5
var c := _fx_center()
for i in 10:
var brick := ColorRect.new()
brick.color = UiKit.BRICK if i % 2 == 0 else UiKit.FLOOR # 碎砖=砖面族色(掩尘/裸土——图底同源)
@@ -167,7 +168,7 @@ func _play_crest_assemble() -> void:
# 坐砖掸灰(失败 §2.5——暖灰尘絮自棋盘中带缓缓飘落,最静一拍的运动承载)
func _play_dust_sadle() -> void:
_fx_dust_motes = 8
var base := _board_rect.get_center() if _board_rect.size != Vector2.ZERO else get_viewport_rect().size * 0.5
var base := _fx_center()
for i in 8:
var mote := ColorRect.new()
mote.color = Color(UiKit.WARM_FAINT, 0.85)
+3 -1
View File
@@ -192,7 +192,9 @@ func _format_row(row: Dictionary, agg_count := -1) -> String:
roll_txt += " · ×%d%%" % int(row.tier)
roll_txt += "〕"
var kill := " ⚔击杀!" if row.get("killed", false) else ""
var body := "%s -%d%s%s%s%s" % [name_, v, roll_txt, tail, kill, suffix]
# 二轮修改批 C(2026-09-29 用户目检——「每次结算标出的伤害数字不明显」):
# 伤害值放大加色独立于行文(朱红大一号——数字即信息主角,非同字号色温微差)
var body := "%s [color=#d9402a][size=17]-%d[/size][/color]%s%s%s%s" % [name_, v, roll_txt, tail, kill, suffix]
var body_col := "#e07050" if row.get("killed", false) else ("#9a8a72" if v == 0 else "#e0a050")
if bool(row.get("crit", false)):
return prefix + _gold_frame(body) # nat 最大面暴击 = 金框高亮行
+71
View File
@@ -0,0 +1,71 @@
# VERTICAL SLICE - NOT FOR PRODUCTION
# Date: 2026-09-29(迭代 8 二轮修改批 A——新冒险互斥确认弹窗化,用户目检裁决:
# 按钮文字换面 → 实底确认弹窗「开新冒险 + 取消」)
# 通用确认弹窗(实底石板皮面板,与营地/设置/图例同族视觉):open(text, confirm_label, cancel_label)
# 双钮外发 confirmed/cancelled——语义装配归调用方,本类零业务触碰(纯视图边界规范 1.3)。
class_name ConfirmDialog
extends Control
signal confirmed
signal cancelled
var _text: Label
var _confirm_btn: Button
var _cancel_btn: Button
func _init() -> void:
var dim := ColorRect.new()
dim.color = Color(UiKit.DIM, 0.55)
dim.set_anchors_preset(Control.PRESET_FULL_RECT)
add_child(dim)
var center := CenterContainer.new()
center.set_anchors_preset(Control.PRESET_FULL_RECT)
dim.add_child(center)
var panel := PanelContainer.new()
panel.add_theme_stylebox_override("panel", UiKit.panel_skinned(Vector4(14, 12, 14, 12)))
center.add_child(panel)
var box := VBoxContainer.new()
box.custom_minimum_size = Vector2(460, 0)
box.add_theme_constant_override("separation", 12)
panel.add_child(box)
_text = UiKit.label("", 16, false)
_text.add_theme_color_override("font_color", UiKit.INK_TITLE)
_text.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART
_text.custom_minimum_size = Vector2(430, 0)
box.add_child(_text)
box.add_child(HSeparator.new())
var btn_row := HBoxContainer.new()
btn_row.add_theme_constant_override("separation", 12)
btn_row.alignment = BoxContainer.ALIGNMENT_CENTER
box.add_child(btn_row)
_cancel_btn = UiKit.button("取消")
_cancel_btn.pressed.connect(_emit_cancelled)
btn_row.add_child(_cancel_btn)
_confirm_btn = UiKit.button("确认")
_confirm_btn.pressed.connect(_emit_confirmed)
btn_row.add_child(_confirm_btn)
visible = false
func open(text: String, confirm_label: String, cancel_label: String = "取消") -> void:
_text.text = text
_confirm_btn.text = confirm_label
_cancel_btn.text = cancel_label
visible = true
func close() -> void:
visible = false
func is_open() -> bool:
return visible
func _emit_confirmed() -> void:
confirmed.emit()
func _emit_cancelled() -> void:
cancelled.emit()
@@ -0,0 +1 @@
uid://dhe557khvoq3y
+12 -16
View File
@@ -1,6 +1,6 @@
# VERTICAL SLICE - NOT FOR PRODUCTION
# Date: 2026-09-29(迭代 8 卡④ 最小设置面)
# 设置覆盖层(纯视图边界规范 1.3 同款):音量滑杆/全屏/减动效三件+退出游戏+返回。
# 设置覆盖层(纯视图边界规范 1.3 同款):音量滑杆/全屏/减动效三件+返回(退出游戏已提级开始菜单)。
# 生效与持久化全经 SettingsStore 单点(实时应用+即改即存);本类零核心触碰。
# 减动效转正承载(测试调整板旧开关退役——设置面唯一入口,卡④ AC③)。
# 探针接缝:retarget(store) = 隔离存档换注口(同 camp 换注先例);控件引用公有只读供断言。
@@ -12,8 +12,8 @@ signal closed
var _store
var _volume: HSlider
var _volume_val: Label
var _fs_btn: CheckButton
var _motion_btn: CheckButton
var _fs_btn: Button
var _motion_btn: Button
func _init(store) -> void:
@@ -65,22 +65,21 @@ func _build() -> void:
_volume_val.custom_minimum_size = Vector2(60, 0)
vol_row.add_child(_volume_val)
# 全屏(art-bible 1920 档缩放策略冲突条目挂起注记——现行视口恒等拉伸,全屏切换即窗口模式切换)
_fs_btn = CheckButton.new()
_fs_btn.text = "全屏"
# 开关形态(二轮修改批 D2 2026-09-29 用户目检——原生 CheckButton 暗底不显眼,
# 换 UiKit 按钮形态 toggle:文字「全屏:开/关」随态换面)
_fs_btn = UiKit.button("全屏:关")
_fs_btn.toggle_mode = true
_fs_btn.toggled.connect(_on_fullscreen_toggled)
box.add_child(_fs_btn)
# 减动效(battle.md §Transitions 承诺转正——时长减半,结算逐行兑现=信息载体不整体跳过)
_motion_btn = CheckButton.new()
_motion_btn.text = "减动效(动画时长减半——运动敏感/演示用)"
_motion_btn = UiKit.button("减动效:关(动画时长减半——运动敏感/演示用)")
_motion_btn.toggle_mode = true
_motion_btn.toggled.connect(_on_motion_toggled)
box.add_child(_motion_btn)
box.add_child(HSeparator.new())
var quit_btn := UiKit.button("退出游戏")
quit_btn.pressed.connect(_on_quit_pressed)
box.add_child(quit_btn)
# 退出游戏已提级开始菜单(D1——设置面不再承载,用户裁决「退出只在一级菜单出现」)
var close_btn := UiKit.button("返回")
close_btn.pressed.connect(_emit_closed)
box.add_child(close_btn)
@@ -90,7 +89,9 @@ func _sync() -> void:
_volume.set_value_no_signal(roundf(_store.volume_linear * 100.0))
_volume_val.text = "%d%%" % roundi(_store.volume_linear * 100.0)
_fs_btn.set_pressed_no_signal(_store.fullscreen)
_fs_btn.text = "全屏:%s" % ("开" if _store.fullscreen else "关")
_motion_btn.set_pressed_no_signal(_store.reduced_motion)
_motion_btn.text = "减动效:%s(动画时长减半——运动敏感/演示用)" % ("开" if _store.reduced_motion else "关")
func _on_volume_changed(v: float) -> void:
@@ -112,10 +113,5 @@ func _on_motion_toggled(on: bool) -> void:
_store.save_settings()
func _on_quit_pressed() -> void:
_store.save_settings()
get_tree().quit()
func _emit_closed() -> void:
closed.emit()