全局作用域变异首发批 T5 呈现三层(迭代14③号卡):settlement_fx_view +play_board_variant_banner(轮横幅先例同款——减动效=静态驻留双态;轮横幅下方叠行位);hero_info_panel_view +地形变异常驻角标段(流派件段先例——空态整节隐藏,摆位provisional归HUD框架批);hud_presenter +board_variant_lines 文案装配+refresh 接线(快照 board_variants 投影——核心→呈现唯一读取面;出战斗即隐);presentation_snapshot +board_variants 投影字段;main.gd _on_round_started 首轮快照判空发射开战横幅(普通图恒零发射);ui_assembler 玩法帮助块 +整图变异说明行(教学定稿批 P4丙「手册零再教」承载位,零交互教学)

This commit is contained in:
DKChan committed 2026-10-04 17:52:42 +08:00
1 parent fcb95f2d5a
commit f8517399a7
5 files changed
+78 -1

No files matched your search

+17
View File
@@ -41,9 +41,13 @@ static func refresh(stage: BattleStageView, info: HeroInfoPanelView, ap_bar: ApB
else:
info.set_relic_holdings([])
if settlement == null:
info.set_board_variants([]) # 战斗域角标出战斗即隐(首发批 2026-10-04——空态纪律)
_refresh_out_of_battle(stage, info, ap_bar, runner, level_active, db)
return
var s: Dictionary = settlement.presentation_snapshot()
# 地形变异常驻角标投影(全局作用域变异首发批 2026-10-04——板级变异快照 → 文案行;
# 空态隐藏=流派件段先例;战斗全程常驻防中局遗忘)
info.set_board_variants(board_variant_lines(db, s.get("board_variants", [])))
var hero: Dictionary = s.hero
if hero.is_empty() or not bool(hero.get("alive", false)):
_refresh_out_of_battle(stage, info, ap_bar, runner, level_active, db)
@@ -109,6 +113,19 @@ static func relic_holdings_lines(db, held: Array) -> Array[String]:
return rlines
# 地形变异常驻角标文案(全局作用域变异首发批 2026-10-04——板级变异 id → display_name 行;
# 空集 = 空数组=空态隐藏。体感短语 provisional 归本地化批)
static func board_variant_lines(db, ids: Array) -> Array[String]:
var lines: Array[String] = []
if db == null or db.variation == null:
return lines
for vid in ids:
var row: Dictionary = db.variation.row_by_id(String(vid))
if not row.is_empty():
lines.append("%s · 奶薄枪肥" % String(row.get("display_name", vid)))
return lines
# ---- 战斗收尾反馈与结算视觉同步(T3 HUD 单通道批 2026-10-02——组合根直改视图收敛入此) ----
# battle_over 收尾反馈:死亡兜底灰化 → 主角态回 idle → RAP 清零脉冲(调试收尾路)→ 状态全清可见反馈。
+8
View File
@@ -764,6 +764,14 @@ func _on_round_started(ri: int) -> void:
else:
_row_pacer.enqueue({"__round_line": ri})
settlement_fx.play_round_banner(ri)
# 开战横幅——板级地形变异预告(全局作用域变异首发批 2026-10-04):首轮快照 board_variants
# 非空才发射(Boss 图恒带一型=替换制;普通图空快照零发射);轮横幅下方叠行,view 内判减动效。
if ri == 1 and settlement != null:
var bvs: Array = settlement.presentation_snapshot().get("board_variants", [])
if not bvs.is_empty():
var vlines: Array[String] = HudPresenter.board_variant_lines(db, bvs)
if not vlines.is_empty():
settlement_fx.play_board_variant_banner("地形变异 · " + vlines[0])
_refresh_used_round = 0
_refresh_presentations()
+1 -1
View File
@@ -150,7 +150,7 @@ static func build_start_overlay(host: Control, db = null) -> Dictionary:
box.add_child(quitbtn)
# 玩法帮助文案(表值驱动——2026-09-16 AP 压速批遗留硬编码 8 随手修正;护甲等级掷点批同步"减伤"→"护甲强化")
var help_text := "玩法:每轮 %d AP——挖开(1AP)/插旗(1AP)/移动(免费)/连锁(免费)。\n每个非封锁格都藏一种格面资源(增伤/护甲强化/回血/爆裂/削弱)。开安全格、标中雷 = 正向兑付;\n开雷格、标错安全格 = 负向兑付——全部在轮末结算逐行兑现;吃掷点的基础攻击按护甲等级判定,无 miss、最低保底 1 点。\n停手:剩余 AP 转存 RAP;弃图刷新:RAP−%d 当场换图继续挖(每轮剩 %d 次)。\n敌人全灭胜、主角倒下负。悬停可看三态光标与可挖域微光。" % [
var help_text := "玩法:每轮 %d AP——挖开(1AP)/插旗(1AP)/移动(免费)/连锁(免费)。\n每个非封锁格都藏一种格面资源(增伤/护甲强化/回血/爆裂/削弱)。开安全格、标中雷 = 正向兑付;\n开雷格、标错安全格 = 负向兑付——全部在轮末结算逐行兑现;吃掷点的基础攻击按护甲等级判定,无 miss、最低保底 1 点。\n停手:剩余 AP 转存 RAP;弃图刷新:RAP−%d 当场换图继续挖(每轮剩 %d 次)。\n敌人全灭胜、主角倒下负。悬停可看三态光标与可挖域微光。\n地形变异:第二关起 Boss 图带整图变异(贫矿脉——奶变薄、枪变肥;开战横幅与 HUD 角标常驻提示)。" % [
int(db.action_economy.ap_per_round), int(db.action_economy.rap_refresh_cost), int(db.action_economy.refresh_cap_per_round)]
# 字号下限(v3.5 批 B3——正文 ≥16);对比度修复(v3.5 批 B3——WARM_FAINT 对深石底实测 2.58:1→暖白 ≥6:1;暗底双色墨制)
var help := UiKit.label(help_text, 16, false, UiKit.WARM)
@@ -23,6 +23,8 @@ var _bonus_section: VBoxContainer # 本关强化(预留——空态
var _bonus_list: VBoxContainer
var _relic_section: VBoxContainer # 流派件持有段(迭代 12 呈现补齐——空态隐藏)
var _relic_list: VBoxContainer
var _board_variant_section: VBoxContainer # 地形变异常驻角标(全局作用域变异首发批——空态隐藏)
var _board_variant_list: VBoxContainer
func _init() -> void:
@@ -79,6 +81,16 @@ func _init() -> void:
_relic_list = VBoxContainer.new()
_relic_list.add_theme_constant_override("separation", 2)
_relic_section.add_child(_relic_list)
# 地形变异常驻角标(全局作用域变异首发批 2026-10-04——Boss 图整图型战斗全程可见防中局遗忘;
# 空态整节隐藏=流派件段先例;摆位/文案 provisional 归 HUD 框架批与本地化批)
_board_variant_section = VBoxContainer.new()
_board_variant_section.add_theme_constant_override("separation", 4)
_board_variant_section.visible = false
col.add_child(_board_variant_section)
_board_variant_section.add_child(UiKit.label("地形变异", 16, true))
_board_variant_list = VBoxContainer.new()
_board_variant_list.add_theme_constant_override("separation", 2)
_board_variant_section.add_child(_board_variant_list)
# 本关强化(预留):锻造/大奖励/关卡奖励节点的属性提升——中循环数据因改变战斗数学准入;
# 与战斗内状态效果(B 区站桩,随战斗消散)分区,防「战斗结束被清」误读;空态整节隐藏
_bonus_section = VBoxContainer.new()
@@ -112,6 +124,17 @@ func set_relic_holdings(lines: Array) -> void:
_relic_section.visible = not lines.is_empty()
# 地形变异常驻角标(首发批 2026-10-04):lines = 文案行(板级变异 display_name+体感短语)——空数组 = 整节隐藏
func set_board_variants(lines: Array) -> void:
for c3 in _board_variant_list.get_children():
_board_variant_list.remove_child(c3)
c3.queue_free()
for line in lines:
var l3 := UiKit.label(String(line), 16, false, COL_INK)
_board_variant_list.add_child(l3)
_board_variant_section.visible = not lines.is_empty()
# 本关强化列表(预留接线面):lines = 文案行数组(如「锻造 +2 攻击」)——空数组 = 整节隐藏
func set_level_bonuses(lines: Array) -> void:
for c in _bonus_list.get_children():
@@ -147,3 +147,32 @@ func play_round_banner(ri: int) -> void:
tw.tween_interval(UiKit.motion(BANNER_DWELL))
tw.tween_property(banner, "modulate:a", 0.0, UiKit.motion(0.25))
tw.tween_callback(banner.queue_free)
# 开战横幅——板级地形变异预告(全局作用域变异首发批 2026-10-04):board_variants 非空时开战
# 显示一行(文本=「地形变异 · 贫矿脉」式);减动效=静态驻留后即隐(轮横幅先例——行呈现不跳过)。
# 文案/驻留参数 provisional 归本地化批;普通图恒不发射(组合根按快照 board_variants 空判)。
func play_board_variant_banner(text: String) -> void:
_fx_banners += 1
var banner := Panel.new()
banner.mouse_filter = Control.MOUSE_FILTER_IGNORE
banner.add_theme_stylebox_override("panel", UiKit.panel_flat(Color(UiKit.BG_OVERLAY, 0.88), UiKit.GOLD_DEEP, 8, 2))
var lab := UiKit.label(text, 22, true, UiKit.GOLD)
lab.set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT)
lab.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
lab.vertical_alignment = VERTICAL_ALIGNMENT_CENTER
banner.add_child(lab)
banner.size = Vector2(320, 46)
banner.position = Vector2((size.x - banner.size.x) * 0.5, size.y * 0.30 + 52.0) # 轮横幅下方叠行(首轮同刻两横幅不重叠)
banner.z_index = 4
add_child(banner)
if UiKit.motion_scale < 1.0:
var st := get_tree().create_timer(BANNER_DWELL)
st.timeout.connect(banner.queue_free)
return
banner.modulate.a = 0.0
var tw := banner.create_tween()
tw.tween_property(banner, "modulate:a", 1.0, UiKit.motion(0.15))
tw.tween_interval(UiKit.motion(BANNER_DWELL))
tw.tween_property(banner, "modulate:a", 0.0, UiKit.motion(0.25))
tw.tween_callback(banner.queue_free)