Skip to content

feat(story-player): logall 文本行点击快进到该行 - #445

Open
daflyinbed wants to merge 1 commit into
mainfrom
feat/story-player-logall-seek
Open

daflyinbed wants to merge 1 commit into
mainfrom
feat/story-player-logall-seek

Conversation

@daflyinbed

@daflyinbed daflyinbed commented Oct 19, 2026 •

Copy link
Copy Markdown
Contributor

背景

调试页 StoryPlayerDebugShell 已有"行号 + 跳转"能力(planChoicesForLine 求选择方案 → 从头重建播放器 → 引擎侧 seekToLine 以 quick 最高档推进)。把同样的快进到某行功能带进正式播放器的 Log All 面板,玩家在文本全览里看到感兴趣的行,点一下即可直达。

实现内容

编排与调试页同一套,按 widget 的生命周期做了适配:

  • LogAllList / LogAllPanel:新增 seekable prop 与 seek 事件;文本行可点击(hover 高亮 + "快进到该行" tooltip),条件分栏递归转发;面板标题提示"点击文本行快进"。播放中的浮层与"只加载文本"两种放置都开启。
  • index.vue:
    • openLogAll 时与文档同源保留一份 StoryFlowResult(planChoicesForLine 需要 emissions,LogDocument 里没有;含 ConditionStore 实例,沿用 shallowRef 整体替换约定)。
    • 点击行 → planChoicesForLine 求方案 → 销毁旧播放器重走 initAndPreload(方案以脚本起点为前提,必须从头播放;已就绪资源在 PIXI 缓存里,二次预载很快)→ seekToLine 武装 + 补 start()(quick 模式自己不会从 idle 起播)。
    • 播放器顶部浮状态条:进行中显示"当前 L? → 目标 L?"并可取消,到达 4s 自动隐去,missed/aborted/error 显示原因;取消时先静默摘引擎编排再切回手动,与 reached 收尾一致。
    • 跳转期间手动切播放模式按引擎既有语义中止;跳过剧情结束、旧版播放器接管、组件卸载路径均清理句柄。
  • initAndPreload 返回值 void → 创建的播放器:跳转路径要拿重建产物,player 是模块级可变量,TS 控制流分析不认函数内部的重新赋值(否则窄化成 never)。
  • AGENTS.md 数据流一节补充说明。

验证

  • eslint 无警告;单测 719 个全过;Log All 全语料回归通过;pnpm build(含 vue-tsc)通过。
  • 本地 dev + 真实 CDN 手测(level_main_00-01_beg,含 1 处 decision):
    • "只加载文本"模式点击靠后的行(L136)→ 重建播放器 → 快进到达,状态条"已到达第 136 行"4s 自动隐去;重开 Log All 后 ▶ 高亮落在目标行;
    • 播放中(L136)点击靠前的行(L20)→ 从头重建再快进,正确到达;
    • 快进中点"取消跳转" → "已手动取消",播放模式回到手动、播放器仍可继续推进。

与调试页 StoryPlayerDebugShell 同一套编排:planChoicesForLine 求选择
方案 → 从头重建播放器(方案以脚本起点为前提,资源已缓存所以二次预载
很快)→ 引擎侧 seekToLine 以 quick 最高档推进,到达/播完/人工干预由
引擎推终态。播放器上方浮状态条显示进度并支持取消。

- LogAllList/LogAllPanel:seekable 时文本行可点击发 seek(源行号),
  条件分栏递归转发
- index.vue:openLogAll 时与文档同源保留 StoryFlowResult(跳转规划
  需要 emissions);initAndPreload 返回创建的播放器供跳转路径取重建
  产物(player 模块级可变量,TS 控制流不认内部重新赋值)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant