using AibisDream.UI;
using UnityEngine;
namespace AibisDream.SaveSystem
{
///
/// screen section 的捕获/还原实现:屏幕后处理饱和度 + ScreenTransitionPanel 遮罩终态。
/// screen section:饱和度 + 全局遮罩终态()。
/// 供 委托,避免 Provider 直接依赖 UI 细节。
///
public static class ScreenSnapshotHelper
{
private static bool _hasDeferredFadeScreenCovered;
private static bool _deferredFadeScreenCovered;
public static ScreenSnapshotDto Capture()
{
var dto = new ScreenSnapshotDto();
if (ScreenEffectManager.Instance != null && ScreenEffectManager.Instance.saturation != null)
{
dto.saturationWeight = ScreenEffectManager.Instance.saturation.weight;
}
if (UIManager.Instance != null)
{
var panel = UIManager.Instance.GetPanel();
if (panel != null)
{
dto.isFadeScreenCovered = panel.CaptureScreenCovered();
}
}
return dto;
}
public static void Restore(ScreenSnapshotDto dto)
{
if (dto == null) return;
if (ScreenEffectManager.Instance != null && ScreenEffectManager.Instance.saturation != null)
{
ScreenEffectManager.Instance.saturation.weight = dto.saturationWeight;
}
if (UIManager.Instance != null)
{
if (SaveRestoreOrchestrator.IsRestoring)
{
_hasDeferredFadeScreenCovered = true;
_deferredFadeScreenCovered = dto.isFadeScreenCovered;
return;
}
var panel = UIManager.Instance.GetPanel();
panel?.ApplyScreenCovered(dto.isFadeScreenCovered);
}
}
/// 读档 FadeOut 完成后应用延迟的遮罩终态。
public static void ApplyDeferredFadeScreenIfNeeded()
{
if (!_hasDeferredFadeScreenCovered)
{
return;
}
_hasDeferredFadeScreenCovered = false;
var panel = UIManager.Instance?.GetPanel();
panel?.ApplyScreenCovered(_deferredFadeScreenCovered);
}
}
}