卡②T4(呈现层结构收敛批): u13/u19–u24——u13 curio_interact_controller引用束注入(16抄写成员删除,正文读点改址ctx三束键名34处,构造单点零随动)+u19 hud_presenter参数束收拢(refresh 8→4ctx五键{settlement,runner,level_active,db,refresh_remaining}/_refresh_out_of_battle 6→4同ctx/tune_sim_report 10→5 stats六键)+消费点改址(main:819 ctx束形/tune_sim stats束形)+u20 CurioFlowContext三束收拢(16参16成员→4参4成员,views/getters/flow字典)+u21 CampFlowContext同形(12→4)+main_ui_build两构造行改束传参+u22 battle_narrator(bonus_card_text模板表化9→4返回+档位尾注/秘宝卡两域)+u23 tune_sim(print删除[信息由logger JSONL承载]+run统计束收拢stats字典+单局模拟提函数;await零触碰=v1.19测量面豁免在册)+u24 playtest_logger(print×2删除,路径信息已由toast/JSONL承载);gdstyle基线内28→24键[await与main两键豁免在册]

This commit is contained in:
DKChan committed 2026-10-28 15:15:42 +08:00
1 parent 525529ad88
commit 836c25e41c
10 files changed
+149 -192

No files matched your search

+18 -20
View File
@@ -39,32 +39,30 @@ func run(n: int) -> void:
# 一文件多局,run 行携带种子切分局次)
var logger = PlaytestLogger.new()
logger.ap_per_round = int(db.run.action_economy.ap_per_round)
var log_path: String = logger.start_session(SEED_BASE)
print("[tune_sim] 模拟日志: %s" % log_path)
logger.start_session(SEED_BASE)
panel.set_sim_running(true)
panel.set_sim_progress("模拟中:0/%d …" % n)
var wins := 0
var dmg_all: Array[float] = []
var hp_left_win: Array[float] = []
var hp_boss: Array[float] = []
var rounds_all: Array[int] = []
var death_nodes := {}
var stats := {"wins": 0, "dmg_all": [], "hp_left_win": [], "hp_boss": [], "rounds_all": [], "death_nodes": {}}
var autoplay = _autoplay()
for i in range(n):
var st = autoplay.run_level(db, SEED_BASE + i, 1, panel.atk_pct(), panel.hp_pct(), false, logger)
dmg_all.append(st.hero_dmg)
rounds_all.append(st.rounds)
if st.result == "victory":
wins += 1
hp_left_win.append(st.hp_left)
hp_boss.append(st.hp_at_boss)
elif st.result == "defeat":
var key := "%d.%s" % [st.defeat_node_index, st.defeat_node_type]
death_nodes[key] = int(death_nodes.get(key, 0)) + 1
_run_one_level(autoplay, stats, i, panel, logger)
panel.set_sim_progress("模拟中:%d/%d …" % [i + 1, n])
await panel.get_tree().process_frame
logger.close_session()
panel.set_sim_report(HudPresenter.tune_sim_report(n, panel.atk_pct(), panel.hp_pct(),
wins, dmg_all, hp_left_win, hp_boss, rounds_all, death_nodes, _base_hp))
panel.set_sim_report(HudPresenter.tune_sim_report(n, panel.atk_pct(), panel.hp_pct(), stats, _base_hp))
## 单局模拟域(循环体提函数——结果四桶记账;u19 stats 六键同构承载)
func _run_one_level(autoplay, stats: Dictionary, i: int, panel, logger) -> void:
var st = autoplay.run_level(db, SEED_BASE + i, 1, panel.atk_pct(), panel.hp_pct(), false, logger)
(stats["dmg_all"] as Array).append(st.hero_dmg)
(stats["rounds_all"] as Array).append(st.rounds)
if st.result == "victory":
stats["wins"] = int(stats["wins"]) + 1
(stats["hp_left_win"] as Array).append(st.hp_left)
(stats["hp_boss"] as Array).append(st.hp_at_boss)
elif st.result == "defeat":
var key := "%d.%s" % [st.defeat_node_index, st.defeat_node_type]
stats["death_nodes"][key] = int(stats["death_nodes"].get(key, 0)) + 1
panel.set_sim_running(false)
_running = false