Files
gplan-2/game/presentation/board_resolvers.gd
T
DKChan b0d92524fe refactor(iter37②): main 组合根判离——投影/解析回调/文案三族出根+装配与流程承接四件(行为等价)
- r1-1 数据投影五函数 → HudPresenter 静态族(status_data/status_curios/career_data/save_select_data/camp_data,依赖面显式参数化)
- r1-2 只读解析回调四函数 → 新件 board_resolvers(有态绑定:db+调试浮窗+结算活态取值三参注入,产出三解析 Callable+override 拼装;注入点改引)
- r1-3 文案拼装三件 → HudPresenter(gp_summary_text/bonus_summary_text/phase_text)
- r1-4 探针直引零改动:_camp_data/_status_data/_gp_summary_text 三件薄委托原签名转发(ui_click/ui_struct 直调面不动)
- 范围扩展(用户令「全部改代码」下压 S13 文件长度线):_build_ui 拆八步 → main_ui_build;冒险/覆盖层/调试流程族 → main_adventure_flow / main_overlay_flow / main_debug_flow(逐字搬运,成员访问改 root 前缀);诊断转储接线留在组合根(source 扫描断言零改动)
- main.gd 1506→946 行(S13 ≤999 达标);九条基线外漂移经代码压回后扫描 229/229、新违规 0,tools/gdstyle_baseline.txt 零改动
- 等价证据:hud_presenter_test / pacing_queue_test / theme_projection_test(162 项)/ modal_flow / standee_fx_sweep / player_copy_sweep / source_guard / meta_progression_forge / breakpoint_resume / level_shop_economy 全绿;probe_gate --click --full 全绿(click 问题=0);冒烟 17/17;S9 类型闸 PASS;撤销证明(删 gp_summary_text 承接体→Parse Error 红→还原复绿)在案
2026-10-25 05:47:46 +08:00

68 lines
3.0 KiB
GDScript

## VERTICAL SLICE - NOT FOR PRODUCTION
## 棋盘每格渲染数据的只读解析回调族:奖励徽章身份(挖掘期 Active 相位内)、地形变异数字遮蔽与角标、
## 调试加成生效值。有态绑定件——构造注入 db、调试浮窗与结算活态取值,产出绑定 Callable 供组合根接线;
## 与无态静态投影族(HudPresenter)职责互斥。
extends RefCounted
var _db: ConfigDb
var _debug_overlay: DebugOverlay
var _settlement_getter: Callable
func _init(db_ref: ConfigDb, debug_overlay_ref: DebugOverlay, settlement_getter: Callable) -> void:
_db = db_ref
_debug_overlay = debug_overlay_ref
_settlement_getter = settlement_getter
# 加成生效值供给(debug_session 注入 Callable——每次从浮窗百分比现算,经 encounter 传参零表写;
# 禁表写路径(双写叠加隐患源头);
# 合成式单点在 UiKit.scaled——与调试浮窗生效值预览共用,本类不持有同式私有实现)
func debug_hero_override() -> Dictionary:
return {"atk": UiKit.scaled(int(_db.hero.atk), _debug_overlay.atk_pct()),
"max_hp": UiKit.scaled(int(_db.hero.max_hp), _debug_overlay.hp_pct())}
# 奖励徽章身份解析(组合根守卫:仅挖掘期 Active 相位内查询——地图战斗资源 Ready 域外零读、零诊断噪音;
# 相位取数经 presentation_snapshot 成文面——禁 settlement.action_economy 链式穿透)
func identity_lookup(c: Vector2i) -> Variant:
var st: BattleOrchestrator = _settlement_getter.call()
if st == null or st.minesweeper.current_board() == null:
return null
if String(st.presentation_snapshot().get("phase", "")) != ActionEconomy.PHASE_ACTIVE:
return null
return st.query_reward_identity(c)
# 地形变异 数字遮蔽解析(信息型 hide_number——格带该效果变异即遮蔽;读取方按格子变异数据行动。
# 变异表直读注入 db——settlement.db 即组合根注入的同一 ConfigDB 实例(AdventureRunner/DebugSession
# 构造传参),免 settlement 内部链式穿透)
func variant_mask_lookup(c: Vector2i) -> bool:
var st: BattleOrchestrator = _settlement_getter.call()
if st == null:
return false
var b = st.minesweeper.current_board()
if b == null:
return false
for vid in b.variant_ids(c):
var vrow: Dictionary[Variant, Variant] = _db.variation.row_by_id(String(vid))
if String(vrow.get("effect", "")) == "hide_number":
return true
return false
# 地形变异 角标解析(伤害型变异未开格视觉标记;读取方按格子变异数据行动,规则本体零特判。
# 策略纹理非数值墙:标记=玩家绕行/承担的决策输入,难度本体仍住数值包络。变异表直读注入 db)
func variant_mark_lookup(c: Vector2i) -> String:
var st: BattleOrchestrator = _settlement_getter.call()
if st == null:
return ""
var b = st.minesweeper.current_board()
if b == null:
return ""
for vid in b.variant_ids(c):
var vrow: Dictionary[Variant, Variant] = _db.variation.row_by_id(String(vid))
if String(vrow.get("effect", "")) == "flat_damage":
return "flat_damage"
return ""