fix: 任务面板重构

This commit is contained in:
2026-07-26 18:07:34 +08:00
parent 0a1adf1558
commit 3cdedb155c
10 changed files with 386 additions and 94 deletions
+3 -3
View File
@@ -146,7 +146,7 @@ Postflight 校验
Provider 使用 `ISyncSnapshotProvider``IAsyncSnapshotProvider` 显式声明同步/异步恢复;异步 Provider 必须把等待过程返回给编排层,禁止内部 fire-and-forget。
## 快照 JSON 结构(schemaVersion = 1
## 快照 JSON 结构(schemaVersion = 2
| 字段 | 含义 |
| --- | --- |
@@ -191,11 +191,11 @@ Fix 场景各 State 的 `Enter()` 通常包含相机过渡、Timeline 播放、F
| --- | --- | --- | --- |
| `punchTape` | `PunchTapeSnapshotDto` | 63 | 打孔带收藏 |
| `fix` | `FixSnapshotDto` | 65 | FixSceneDirector 宏观模式(state + args |
| `fixPanel` | `FixPanelSnapshotDto` | 66 | FixPanel 壳层 + 线缆/插头 + TaskPanel(展开状态与任务列表) |
| `fixPanel` | `FixPanelSnapshotDto` | 66 | FixPanel 壳层 + 线缆/插头 + TaskPanel请求展开状态与任务列表) |
| `bodyModule` | `BodyModuleSnapshotDto` | 67 | 插线模块物理态 |
| `eye` | `EyeSnapshotDto` | 68 | Eye 叙事阶段 |
**还原顺序**punchTape → fixcue)→ fixPanel → bodyModule → eye → showcase → day2SleepPresentation → playTool → screen。`fixPanel` 须在 `fix` 之后,以覆盖 Cue `EnterImmediate` 中的 `ResetPlug`;D2 动态表现须在通用 Showcase 图片之后恢复,才能叠加虚焦、缩放或场景专属动画。
**还原顺序**punchTape → fixcue)→ fixPanel → bodyModule → eye → showcase → day2SleepPresentation → playTool → screen。`fixPanel` 须在 `fix` 之后,以覆盖 Cue `EnterImmediate` 中的 `ResetPlug`,并让 Memory Cue 先建立 TaskPanel 临时隐藏状态;D2 动态表现须在通用 Showcase 图片之后恢复,才能叠加虚焦、缩放或场景专属动画。
**维修场景门控**`FixSceneSnapshotHelper`):上述 section 仅在 `FixSystemCenter.Instance != null` 时 Capture/Restore。
+4 -4
View File
@@ -9,7 +9,7 @@ namespace AibisDream.SaveSystem
/// </summary>
public static class SaveSnapshotSchema
{
public const int CurrentVersion = 1;
public const int CurrentVersion = 2;
}
/// <summary>
@@ -269,7 +269,7 @@ namespace AibisDream.SaveSystem
/// <summary>Yarn 行 id,如 <c>line:01dade5</c>。</summary>
public string lineId;
/// <summary>存档时 UI 显示的完整文本(含 <c>● </c> 前缀。</summary>
/// <summary>存档时已完成 substitutions 的本地化文本,不含 UI 圆点前缀。</summary>
public string text;
}
@@ -290,8 +290,8 @@ namespace AibisDream.SaveSystem
/// <summary>插头插入的 BodyModule 名(data.moduleName);null/空 = 未插入。</summary>
public string pluggedModuleName;
/// <summary>TaskPanel 是否处于展开位(<c>show_task_panel</c> 后)。</summary>
public bool isTaskPanelVisible;
/// <summary>剧情是否要求 TaskPanel 展开;Memory 等临时隐藏状态不写入存档。</summary>
public bool isTaskPanelRequestedVisible;
/// <summary>TaskPanel 当前未完成任务列表(保持插入顺序)。</summary>
public List<TaskEntrySnapshotDto> tasks = new();