## 战斗屏布局表 schema:分区几何与明细带高度的单行类型化读取(呈现层布局配置,非玩法数值)。 ## 消费面 = BattleStageView / BattleLogView / HeroInfoPanelView / ApBarView(经 ConfigDb.presentation.battle_layout); ## 文档只写结构关系与表名,不复制数值。validate() 违例加载期致命(fail-fast)。 class_name BattleLayoutTable extends Resource @export var stage_h: int = 252 # B 区高(全宽战斗画面,含底部明细带) @export var ground_h: int = 100 # B 区连续地面层高(源 = 基准屏宽 × 本值) @export var info_panel_w: int = 240 # C 区宽(左下角色信息列) @export var ap_bar_h: int = 44 # D 区 AP 条高 @export var log_band_h_dig: int = 24 # 明细带挖掘期收起高(单行上轮摘要) @export var log_band_h_settle: int = 84 # 明细带结算期展开高(实时结算流) func validate() -> Array: var errs: Array[Dictionary] = [] if stage_h < 120 or stage_h > 600: errs.append({"category": "domain", "message": "stage_h 越域 [120,600]: %d" % stage_h}) if info_panel_w < 120 or info_panel_w > 480: errs.append({"category": "domain", "message": "info_panel_w 越域 [120,480]: %d" % info_panel_w}) if ap_bar_h < 24 or ap_bar_h > 96: errs.append({"category": "domain", "message": "ap_bar_h 越域 [24,96]: %d" % ap_bar_h}) if log_band_h_dig < 16 or log_band_h_dig > 80: errs.append({"category": "domain", "message": "log_band_h_dig 越域 [16,80]: %d" % log_band_h_dig}) if log_band_h_settle < 24 or log_band_h_settle > 160: errs.append({"category": "domain", "message": "log_band_h_settle 越域 [24,160]: %d" % log_band_h_settle}) if log_band_h_settle < log_band_h_dig: errs.append({"category": "cross_field", "message": "log_band_h_settle(%d) < log_band_h_dig(%d)——展开态不得矮于收起态" % [log_band_h_settle, log_band_h_dig]}) if log_band_h_settle >= stage_h: errs.append({"category": "cross_field", "message": "log_band_h_settle(%d) ≥ stage_h(%d)——明细带不得占满 B 区" % [log_band_h_settle, stage_h]}) errs.append_array(_ground_field_errors()) return errs ## 地面层域校验(拆私有辅助——validate 分支预算内;ground_h 单源 = 布局表) func _ground_field_errors() -> Array: var errs: Array[Dictionary] = [] if ground_h < 16 or ground_h > stage_h / 2: errs.append({"category": "domain", "message": "ground_h 越域 [16, stage_h/2=%d]: %d" % [stage_h / 2, ground_h]}) if ground_h <= log_band_h_dig: errs.append({"category": "cross_field", "message": "ground_h(%d) ≤ log_band_h_dig(%d)——地面层不得被收起态明细带整条盖住" % [ground_h, log_band_h_dig]}) return errs