feat(迭代27 T6+T7): 波五b 卫生件包+文档同步闸——对拍全同
T6 卫生件(P2 组收口):
- 死代码 13 函数删除(审计 16 处复核=ui_kit:486 实读现役不删,追认单#14)+FeatsEngine
整文件退役(class_name 注销)
- 字符串 Callable×10 位→方法引用形态(编译期方法存在性校验;语法实证 METHOD_REF=true)
- 状态机 enum 化: adventure State(外部 String 契约 getter 词表逐位一致+外部纯读实证)/
standee HeroState(register/set String 形参零变化+probe 面恒等)
- ConfigDB _fatal 退出归根(核心层去 quit/crash→_fatal_flag,决策归组合根 fail-fast 通道)
+resolver 诊断/数据通道全面 Callable 化(ConfigDb↔Resolver 类型环断根)
T7 文档同步闸:
- 实现报告 design/qa/iter27-实现报告-2026-10-14.md(五波+闸表+追认单十五项+反哺点两条+目检五件)
- 06 迭代 27 条销号+GDD 反哺点两条新条;07 ㉖ 目检节+v1.0 版本行;roadmap ✅ 换代
- 审计报告本体按退役规则 git rm(吸收即死;修正计数由卡片承载);卡片来源行改指路
闸: 对拍三变体全同(第五跑)+冒烟 1081/0+run_all 27 套+probe click+render golden+static_scan 全绿
This commit is contained in:
1 parent
b605022001
commit
eea345882b
24 files changed
+200
-309
No files matched your search
@@ -52,10 +52,6 @@ func _init(ctx: CurioFlowContext) -> void:
|
||||
|
||||
|
||||
# 停点在途判据(组合根 _on_battle_end_continue 分派面——战斗总结确认后开三选一)
|
||||
func has_pending() -> bool:
|
||||
return not _pending_curio.is_empty()
|
||||
|
||||
|
||||
# 续玩停点恢复入口(true=已接手呈现,调用方中止后续分派)。空候选降级(2026-10-06 用户令):
|
||||
# 候选 0 件不开选择面(空面无卡无钮=死面)——消化停点后按上下文直落后续推进(战斗总结面已
|
||||
# 给过玩家确认拍,三选一环节整体跳过)
|
||||
|
||||
@@ -42,6 +42,14 @@
|
||||
# autoload 占净名),存档读盘挂 autoload _ready(时序与旧 main._ready 读盘等价)。
|
||||
extends Control
|
||||
|
||||
# autoload 节点路径单点(迭代 27 T6 P2-2 降格实现:审计处方「编译期全局名」与本仓 --script
|
||||
# 模式编译器不解析裸 autoload 标识符冲突〔run_all.gd 头注+pacing 实证〕——字符串拼写风险
|
||||
# 收敛到四常量,类型面由读视图属性承载)
|
||||
const AUTOLOAD_PATH_CFG := "/root/ConfigDB"
|
||||
const AUTOLOAD_PATH_RNG := "/root/RngService"
|
||||
const AUTOLOAD_PATH_SAVE := "/root/SaveManager"
|
||||
const AUTOLOAD_PATH_META := "/root/MetaProgression"
|
||||
|
||||
const UiAssembler := preload("res://presentation/ui_assembler.gd")
|
||||
const Narrator := preload("res://presentation/battle_narrator.gd")
|
||||
const ModalStack := preload("res://presentation/modal_stack.gd")
|
||||
@@ -62,10 +70,10 @@ var run_scope = null # 会话状态承载(run_scope.gd——迭
|
||||
# 节点路径双模式通用;组合根调用点/探针挂载面 main.save_manager 语义零迁移)。
|
||||
var save_manager: SaveManagerCore:
|
||||
get:
|
||||
return get_node("/root/SaveManager")
|
||||
return get_node(AUTOLOAD_PATH_SAVE)
|
||||
var meta: MetaProgressionCore:
|
||||
get:
|
||||
return get_node("/root/MetaProgression")
|
||||
return get_node(AUTOLOAD_PATH_META)
|
||||
var logger = null # 试玩日志器(JSONL 持久化 + 卡死诊断转储——呈现层组件)
|
||||
var _debug_entry := false # 调试会话门控(迭代 18 卡⑦——DS_DEBUG=1:启动即开浮窗+两屏角标点亮;_ready 赋值)
|
||||
var _seed_edit: LineEdit
|
||||
@@ -175,7 +183,7 @@ func _begin_session(adventure_session: bool) -> void:
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
db = get_node("/root/ConfigDB")
|
||||
db = get_node(AUTOLOAD_PATH_CFG)
|
||||
if not db.is_ready:
|
||||
var ok: bool = db.load_tables("res://data/tables", false)
|
||||
if not ok:
|
||||
@@ -187,8 +195,8 @@ func _ready() -> void:
|
||||
settings_store = SettingsStore.new()
|
||||
settings_store.load_settings()
|
||||
settings_store.apply()
|
||||
_debug = DebugSessionScript.new(db, get_node("/root/RngService"),
|
||||
Callable(self, "_debug_hero_override"), Callable(self, "_seed_value"))
|
||||
_debug = DebugSessionScript.new(db, get_node(AUTOLOAD_PATH_RNG),
|
||||
_debug_hero_override, _seed_value)
|
||||
_debug.battle_created.connect(_on_debug_battle_created)
|
||||
_debug.battle_ready.connect(_on_debug_battle_ready)
|
||||
_build_ui()
|
||||
@@ -482,7 +490,7 @@ func _resume_from_menu() -> void:
|
||||
|
||||
# 冒险编排构建+接线(开新局/续玩共用——信号连接只在组合根,ADR-0001;断点注入同口)
|
||||
func _wire_adventure() -> void:
|
||||
run_scope.adventure = AdventureRunner.new(db, get_node("/root/RngService"))
|
||||
run_scope.adventure = AdventureRunner.new(db, get_node(AUTOLOAD_PATH_RNG))
|
||||
run_scope.adventure.step_row.connect(_on_step_row)
|
||||
run_scope.adventure.round_started.connect(_on_round_started)
|
||||
run_scope.adventure.board_changed.connect(_on_board_changed)
|
||||
@@ -1343,7 +1351,7 @@ func _debug_run_data() -> Dictionary:
|
||||
func _current_master_seed() -> int:
|
||||
if run_scope.adventure != null:
|
||||
return int(run_scope.adventure.master_seed)
|
||||
return int(get_node("/root/RngService").master_seed)
|
||||
return int(get_node(AUTOLOAD_PATH_RNG).master_seed)
|
||||
|
||||
|
||||
func _close_debug_overlay() -> void:
|
||||
|
||||
@@ -167,10 +167,6 @@ func press_refresh() -> void:
|
||||
_refresh_btn.pressed.emit()
|
||||
|
||||
|
||||
func selected_id() -> String:
|
||||
return _selected
|
||||
|
||||
|
||||
# 兑付反馈态(curio_resolved 到达——结果行追加在头部之后;唯一出口 = 继续)
|
||||
func show_result(text: String) -> void:
|
||||
_label.text = _header + "\n" + text
|
||||
|
||||
@@ -13,9 +13,4 @@ extends Node2D
|
||||
var world_font: Font = null # 字体注入槽位(null = ThemeDB.fallback_font——BattleStageView.set_world_font 注入)
|
||||
|
||||
# C6 headless 可验判据(ADR-0003 Decision 4):注入字体非空 + 中文字形 has_char + 采样文本宽度 > 0。
|
||||
# 实际光栅观感归批末目检清单。
|
||||
func font_probe() -> Dictionary:
|
||||
var f: Font = world_font if world_font != null else ThemeDB.fallback_font
|
||||
var has_char: bool = f.has_char("人".unicode_at(0))
|
||||
var width: float = f.get_string_size("兑现演出区", HORIZONTAL_ALIGNMENT_LEFT, -1, 14).x
|
||||
return {"font": f, "has_char": has_char, "width": width}
|
||||
# 实际光栅观感归批末目检清单。
|
||||
@@ -37,7 +37,10 @@ var _portrait_flip := false
|
||||
# 主角三态切换(迭代 6 T3):state 名 → 纹理(battle_stage_view 组合点注册);缺态=保持现纹理
|
||||
# (缺位回退链延伸——三态素材缺任一不炸不空)。敌站桩不注册不消费。
|
||||
var _hero_tex := {}
|
||||
var _hero_state := "idle"
|
||||
enum HeroState { IDLE, RESET, ATTACK, HIT } # 主角三态+复位哨兵(迭代 27 T6——裸字符串 enum 化;外部 String 契约=register/set 形参零变化)
|
||||
const _HS_NAME := {HeroState.IDLE: "idle", HeroState.RESET: "reset", HeroState.ATTACK: "attack", HeroState.HIT: "hit"}
|
||||
const _HS_VALUE := {"idle": HeroState.IDLE, "reset": HeroState.RESET, "attack": HeroState.ATTACK, "hit": HeroState.HIT}
|
||||
var _hero_state: int = HeroState.IDLE
|
||||
var _state_revert_tw: Tween
|
||||
var _order := 1
|
||||
var _intent_glyph := ""
|
||||
@@ -330,7 +333,7 @@ func _revive() -> void:
|
||||
modulate = Color(1, 1, 1)
|
||||
rotation_degrees = 0.0
|
||||
if _kind == "hero":
|
||||
_hero_state = "reset" # 强制回 idle 态(绕过同态早退)
|
||||
_hero_state = HeroState.RESET # 强制回 idle 态(绕过同态早退)
|
||||
set_hero_state("idle")
|
||||
_refresh_portrait_glyph()
|
||||
if slot_row != null:
|
||||
@@ -368,11 +371,12 @@ func register_hero_state(state: String, tex: Texture2D) -> void:
|
||||
# 状态切换:现纹理换注册态(attack/hit);未注册态名或缺位 = 保持现纹理不炸。
|
||||
# 非 idle 态自动短驻回归 idle(0.35s——演出一拍即回,结算收尾另有显式 idle 兜底)。
|
||||
func set_hero_state(state: String) -> void:
|
||||
if _kind != "hero" or state == _hero_state:
|
||||
var target: int = _HS_VALUE.get(state, -1)
|
||||
if _kind != "hero" or target == _hero_state:
|
||||
return
|
||||
if not _hero_tex.has(state) and state != "idle":
|
||||
return
|
||||
_hero_state = state
|
||||
_hero_state = target
|
||||
if _portrait_sprite != null and _hero_tex.has(state):
|
||||
_portrait_sprite.texture = _hero_tex[state]
|
||||
if _state_revert_tw != null and _state_revert_tw.is_valid():
|
||||
@@ -384,14 +388,14 @@ func set_hero_state(state: String) -> void:
|
||||
|
||||
|
||||
func _settle_hero_idle() -> void:
|
||||
_hero_state = "idle"
|
||||
_hero_state = HeroState.IDLE
|
||||
if _portrait_sprite != null and _hero_tex.has("idle"):
|
||||
_portrait_sprite.texture = _hero_tex["idle"]
|
||||
|
||||
|
||||
# 三态探针出口(fx_probe——当前态名+注册态集合)
|
||||
func hero_state_probe() -> Dictionary:
|
||||
return {"state": _hero_state, "registered": _hero_tex.keys()}
|
||||
return {"state": _HS_NAME.get(_hero_state, "idle"), "registered": _hero_tex.keys()}
|
||||
|
||||
|
||||
func _portrait_color() -> Color:
|
||||
|
||||
Reference in new issue
Block a user