Files
dingyuntian f51a670239 refactor: 将淡入淡出迁移到 ScreenTransitionPanel
- 将 BaseYarnCommand、FixSystemNew 各状态、GameManager、
  SaveSystem、PlayToolPanel 中的 PlayToolPanel 遮罩调用
  统一迁移到 ScreenTransitionPanel
- 从 PlayToolPanel 移除 _fadeImage 及相关 fade 方法
- 从 Play Tool Panel Prefab 移除 Fade Image 子对象
2026-07-16 17:56:51 +08:00

74 lines
2.5 KiB
C#

using AibisDream.UI;
using UnityEngine;
namespace AibisDream.SaveSystem
{
/// <summary>
/// screen section 的捕获/还原实现:屏幕后处理饱和度 + ScreenTransitionPanel 遮罩终态。
/// screen section:饱和度 + 全局遮罩终态(<see cref="ScreenTransitionPanel.CaptureScreenCovered"/>)。
/// 供 <see cref="ScreenSnapshotProvider"/> 委托,避免 Provider 直接依赖 UI 细节。
/// </summary>
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<ScreenTransitionPanel>();
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<ScreenTransitionPanel>();
panel?.ApplyScreenCovered(dto.isFadeScreenCovered);
}
}
/// <summary>读档 FadeOut 完成后应用延迟的遮罩终态。</summary>
public static void ApplyDeferredFadeScreenIfNeeded()
{
if (!_hasDeferredFadeScreenCovered)
{
return;
}
_hasDeferredFadeScreenCovered = false;
var panel = UIManager.Instance?.GetPanel<ScreenTransitionPanel>();
panel?.ApplyScreenCovered(_deferredFadeScreenCovered);
}
}
}