From fd6c208b2e9315e8906b77f6f78751d495fcdb4a Mon Sep 17 00:00:00 2001 From: DKChan <524912269@qq.com> Date: Thu, 8 Oct 2026 16:44:27 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D:=20=E5=8D=A1=E2=91=A3T2?= =?UTF-8?q?=E2=80=94=E2=80=94=E6=8F=90=E7=81=AF=E8=A7=86=E9=87=8E=E5=91=88?= =?UTF-8?q?=E7=8E=B0=E6=A1=A5=E6=8E=A5=E7=BA=BF=EF=BC=88=E7=94=9F=E4=BA=A7?= =?UTF-8?q?=E8=B7=AF=E5=BE=84=E8=B4=AF=E9=80=9A=3D=E5=AE=8C=E6=88=90?= =?UTF-8?q?=E5=BA=A6=200=E2=86=921=EF=BC=89=EF=BC=9A=E2=91=A0battle=5Forch?= =?UTF-8?q?estrator.gd=20=E8=A3=85=E9=85=8D=E9=9B=86=E5=85=AC=E5=85=B1?= =?UTF-8?q?=E5=8F=AA=E8=AF=BB=E8=AE=BF=E9=97=AE=E5=99=A8=20attune=5Fhas(it?= =?UTF-8?q?em=5Fid)=EF=BC=88=5Fattune=5Fhas=20=E5=A5=91=E7=BA=A6=E5=8C=96?= =?UTF-8?q?=E5=87=BA=E5=8F=A3=EF=BC=8Csave=20v6=20=E5=8F=AA=E8=AF=BB?= =?UTF-8?q?=E8=AE=BF=E9=97=AE=E5=99=A8=E5=85=88=E4=BE=8B=EF=BC=9Bprivate?= =?UTF-8?q?=20=E9=9D=A2=E9=9B=B6=E6=94=B9=E5=8A=A8=EF=BC=89=E2=91=A1main.g?= =?UTF-8?q?d=20=E5=91=88=E7=8E=B0=E6=A1=A5=20=5Fsync=5Ffog=5Flantern?= =?UTF-8?q?=E2=80=94=E2=80=94settlement.attune=5Fhas(fog=5Flantern)=20?= =?UTF-8?q?=E7=9C=9F=E5=80=BC=E6=98=BE=E5=BC=8F=E5=86=99=E7=BB=99=20board?= =?UTF-8?q?=5Fview.set=5Ffog=5Flantern=EF=BC=88=E5=86=99=E5=85=A5=E5=8D=B3?= =?UTF-8?q?=20refresh=20=E5=85=A8=E6=9D=BF=E9=87=8D=E7=AE=97=EF=BC=89?= =?UTF-8?q?=EF=BC=9B=E6=8C=82=E7=82=B9=3D=5Fon=5Fround=5Fstarted=20ri=3D?= =?UTF-8?q?=3D1=20=E6=AF=8F=E6=88=98=E9=A6=96=E8=BD=AE=E8=A3=85=E9=85=8D?= =?UTF-8?q?=E9=93=BE=E6=98=BE=E5=BC=8F=E9=87=8D=E7=AE=97=E5=90=AB=E5=90=A6?= =?UTF-8?q?=E3=80=94=F0=9F=94=B4=20=E5=A5=91=E7=BA=A6=207=20Q8.1=20?= =?UTF-8?q?=E5=A4=8D=E5=8E=9F=E8=AF=AD=E4=B9=89=3D=E7=A6=81=E6=88=98?= =?UTF-8?q?=E6=96=97=E7=BB=93=E6=9D=9F=E9=9A=90=E5=BC=8F=E5=A4=8D=E5=8E=9F?= =?UTF-8?q?=EF=BC=9B=E6=97=B6=E5=BA=8F=E4=BE=9D=E6=8D=AE=EF=BC=9Around=5Fs?= =?UTF-8?q?tarted=20=E9=A6=96=E8=BD=AE=E5=8F=91=E5=B0=84=E4=BD=8D=E5=9C=A8?= =?UTF-8?q?=20begin=5Fbattle=20=E5=B0=BE=20attunement=20=E6=B3=A8=E5=85=A5?= =?UTF-8?q?=E5=90=8E=E2=80=94=E2=80=94board=5Fchanged=20=E5=9C=A8=20=5Fins?= =?UTF-8?q?tall=5Fnew=5Fboard=20=E5=86=85=E5=85=88=E5=8F=91=E8=A3=85?= =?UTF-8?q?=E9=85=8D=E9=9B=86=E5=90=8E=E6=B3=A8=E5=85=A5=EF=BC=8C=E5=90=8C?= =?UTF-8?q?=E5=B8=A7=E7=9B=B4=E6=8C=82=20=5Fon=5Fboard=5Fchanged=20?= =?UTF-8?q?=E4=BC=9A=E8=AF=BB=E5=88=B0=E4=B8=8A=E4=B8=80=E6=88=98=E6=97=A7?= =?UTF-8?q?=E9=9B=86=EF=BC=8C=E6=95=85=E4=B8=8D=E6=8C=82=E3=80=95=EF=BC=9B?= =?UTF-8?q?=E6=9C=AA=E8=A3=85=E9=85=8D=3Dfalse=20=E5=86=99=200=3D=E7=BC=BA?= =?UTF-8?q?=E7=9C=81=E9=9B=B6=E6=89=B0=E5=8A=A8=E5=9F=BA=E7=BA=BF=E9=80=90?= =?UTF-8?q?=E4=BD=8D=E4=B8=8D=E5=8F=98=EF=BC=9B=E5=86=92=E7=83=9F=20840/0?= =?UTF-8?q?=20=E5=9B=9E=E5=BD=92=E9=9B=B6=E7=A0=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- game/core/battle_orchestrator.gd | 7 +++++++ game/presentation/main.gd | 18 ++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/game/core/battle_orchestrator.gd b/game/core/battle_orchestrator.gd index 775a6f38..8ce25a29 100644 --- a/game/core/battle_orchestrator.gd +++ b/game/core/battle_orchestrator.gd @@ -125,6 +125,13 @@ func _attune_has(item_id: String) -> bool: return attunement.has(item_id) +# 装配集只读出口(迭代 19 卡④——呈现桥消费面:组合根每战装配链判「装配集含 fog_lantern」→ +# board_view.set_fog_lantern。_attune_has 契约化出口,save v6 只读访问器先例;private 面内部调用 +# 零改动。只读零副作用——呈现侧判定专用,非结算写入口) +func attune_has(item_id: String) -> bool: + return _attune_has(item_id) + + # 装备件表值读取(charge_n 等——TreasureItemTable 行;未装配不读表。magnitude 读数面随 T4 # 秘宝订阅迁移退役——行值经 value_from 在 rebuild 定影,零运行期按件取值) func _attune_row(item_id: String) -> Dictionary: diff --git a/game/presentation/main.gd b/game/presentation/main.gd index 58b96d35..ba62edc7 100644 --- a/game/presentation/main.gd +++ b/game/presentation/main.gd @@ -849,6 +849,14 @@ func _on_round_started(ri: int) -> void: else: _row_pacer.enqueue({"__round_line": ri}) settlement_fx.play_round_banner(ri) + # 提灯视野同步(迭代 19 卡④——呈现桥:每战首轮按装配集显式重算 set_fog_lantern 含否〔🔴 契约 7 + # Q8.1 复原语义:禁依赖战斗结束隐式复原——下一战装配链重算即含「未装配→写 0」复原〕)。挂点时序 + # 依据:round_started 首轮发射位在 begin_battle 尾(attunement 注入之后)——board_changed 在 + # _install_new_board 内先发、装配集后注入,同帧直挂会读到上一战的旧集,故挂此处不挂 _on_board_changed。 + # settlement 空防御照 :854 既有形态(接手先于本信号:冒险路径 board_changed 内 runner 同步、debug + # 路径 battle_created 先于 begin_battle)。未装配=false→写 0=缺省零扰动基线逐位不变。 + if ri == 1: + _sync_fog_lantern() # 开战横幅——板级地形变异预告(全局作用域变异首发批 2026-10-04):首轮快照 board_variants # 非空才发射(Boss 图恒带一型=替换制;普通图空快照零发射);轮横幅下方叠行,view 内判减动效。 if ri == 1 and settlement != null: @@ -872,6 +880,16 @@ func _on_board_changed() -> void: _refresh_presentations() +# 提灯视野呈现桥(迭代 19 卡④——装配集只读出口消费面:settlement.attune_has("fog_lantern") 真值 +# 显式写给 board_view.set_fog_lantern(true=半径 8+2 / false=复原 0),写入即 setter 内 refresh 全板 +# 重算雾态。调用点=每战首轮装配链(_on_round_started ri==1)——纯呈现边界 🔴 契约 2:只写呈现态布尔, +# minesweeper 结算零触碰;off 态(未装配)写 0=与既有基线逐位一致。 +func _sync_fog_lantern() -> void: + if settlement == null or board_view == null: + return + board_view.set_fog_lantern(settlement.attune_has("fog_lantern")) + + # ---- 一次性非模态提示(每 run 一次——pattern 10)与诚实提示 ---- func _check_board_hints() -> void: