feat(save): 新增梦境演出图与物品图的存档快照
新增 showcase(order 69) 与 playTool(order 70) 两个快照 section, 分别持久化 SpriteShowcase 小图/大图与 PlayToolPanel 物品图/全屏图 的终态,读档时直接还原静止画面。SpriteShowcase 与 PlayToolPanel 补充快照捕获/还原与立即清理逻辑,GameManager 在卸载场景前清理 演出效果。screen 还原顺序顺延至 80。
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
using System.Collections;
|
||||
using AibisDream.UI;
|
||||
|
||||
namespace AibisDream.SaveSystem
|
||||
{
|
||||
/// <summary>sections["playTool"]:物品图与全屏图。RestoreOrder=70。</summary>
|
||||
public sealed class PlayToolSnapshotProvider : IAsyncSnapshotProvider
|
||||
{
|
||||
public string SaveId => SnapshotProviderIds.PlayTool;
|
||||
public int RestoreOrder => 70;
|
||||
|
||||
public object Capture()
|
||||
{
|
||||
var panel = UIManager.Instance?.GetPanel<PlayToolPanel>();
|
||||
return panel != null ? panel.CaptureSnapshot() : null;
|
||||
}
|
||||
|
||||
public IEnumerator RestoreAsync(object dto, SnapshotRestoreContext context)
|
||||
{
|
||||
if (dto is not PlayToolSnapshotDto snapshot)
|
||||
{
|
||||
context.Warn("[PlayToolSnapshotProvider] DTO 类型不匹配,跳过还原。");
|
||||
yield break;
|
||||
}
|
||||
|
||||
var panel = UIManager.Instance?.GetPanel<PlayToolPanel>();
|
||||
if (panel == null)
|
||||
{
|
||||
context.Warn("[PlayToolSnapshotProvider] PlayToolPanel 未初始化,跳过还原。");
|
||||
yield break;
|
||||
}
|
||||
|
||||
yield return panel.RestoreSnapshotAsync(snapshot, context.Warn);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user