Skip to content

fix(webgal): 预览基线有效期绑定编辑指针,修复保存后丢失继承变换字段 - #1037

Merged
MakinoharaShoko merged 2 commits into
OpenWebGAL:devfrom
A-kirami:fix/editor-preview-baseline-lifetime
Sep 23, 2026
Merged

MakinoharaShoko merged 2 commits into
OpenWebGAL:devfrom
A-kirami:fix/editor-preview-baseline-lifetime

Conversation

@A-kirami

Copy link
Copy Markdown
Contributor

描述

效果编辑器打开期间,保存场景 / 自动保存 / 预览刷新会发一次不带 transformBaselineRevision 的 sync-scene。运行时对任何无 token 的 sync 都会失效当前基线,于是同一编辑指针上的重复 sync 会打掉自己的基线:之后的 set-effect 只有稀疏 payload,只能用 baseTransform 合并,继承字段被解析成默认值(立绘丢缩放、滤镜),画面与表单不一致;写回语句不受影响。

改动:

  • 基线(snapshot 与 set-effect 合并基线)的有效期改为绑定 (sceneName, sentenceId):同指针的重复 sync 不失效;指针变化、reset / reload、run-snippet / run-scene-content 仍然失效。
  • set-effect 的合并基线不再单独缓存,每次由 baseTransform + ready snapshot 现算。
  • revision-bound sync 的 settle 判定改用 replay 写回的 stoppedAtTarget(同场景 + 停止指针不早于解析后的停点),修掉多行语句续行指针与 -next 越点被误判为未停点导致的无谓失效。

动机和背景

基线的语义边界本来就是「当前编辑指针」,而不是「最近一次携带 token 的 sync」。同一次编辑会话里的保存 / 自动保存 / 预览刷新都落在同一指针上,重放的是同一段脚本,没有理由失效基线。

A-kirami and others added 2 commits September 21, 2026 22:30
效果编辑器会话中的保存场景、自动保存、预览面板刷新都会发一次不带
transformBaselineRevision 的 sync-scene。handleSyncScene 对所有无 token 的 sync
都执行 invalidateCurrentRevision() 并清空 setEffectBaselines,于是同一编辑指针上
的重复 sync 会打掉自己的基线:之后 preview.command.set-effect 的稀疏 payload 只能
用 baseTransform 合并,继承字段被解析成默认值(立绘丢缩放、滤镜)。写回语句不受
影响。

改为按 (sceneName, sentenceId) 判定失效:同指针的重复 sync 不失效 current
snapshot;指针变化、runtime reset / reload、run-snippet / run-scene-content 仍然
失效。set-effect 的合并基线不再单独缓存,每次由 baseTransform + ready snapshot
现算,避免缓存与 snapshot 各有一套有效期。

revision-bound sync 的 settle 判定改用 replay 写回的 stoppedAtTarget(同场景且
停止指针不早于解析后的停点):原实现拿 payload 原始指针做严格相等,多行语句的
续行指针与 -next 链越点都会被误判为未停点,把刚在正确采样点发布的 snapshot 撤销。

不新增 wire 字段。
@MakinoharaShoko
MakinoharaShoko merged commit f2b31dc into OpenWebGAL:dev Sep 23, 2026
1 check passed
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.

2 participants