Files

68 lines
3.1 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.combat.hero.atk), _debug_overlay.atk_pct()),
"max_hp": UiKit.scaled(int(_db.combat.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.combat.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.combat.variation.row_by_id(String(vid))
if String(vrow.get("effect", "")) == "flat_damage":
return "flat_damage"
return ""