using SUISS.Storage; using System; using System.Collections.Generic; using UnityEngine; namespace SUISS.Scheduling { public class TimingScaleRestore : MonoBehaviour { [SerializeField] private StorageLifecycle StorageLifecycle = StorageLifecycle.Game; [SerializeField] private string StorageKey = "Timing"; private const string StoredScaleKey = "Scale"; private const string ScaleUntilKey = "ScaleUntilTick"; public static TimingScaleRestore Instance { get; private set; } public void RestoreTimingScale() { Dictionary dictionary = SUISS.Storage.Storage.Get(StorageLifecycle).GetDictionary(StorageKey); if (dictionary.ContainsKey("Scale") && dictionary.ContainsKey("StartTicks") && dictionary.ContainsKey("BaseTime") && dictionary.ContainsKey("ScaleUntilTick")) { long num = (long)dictionary["BaseTime"]; long num2 = (long)dictionary["StartTicks"]; double num3 = (double)dictionary["Scale"]; long val = (long)dictionary["ScaleUntilTick"]; long ticks = DateTime.UtcNow.Ticks; long num4 = Math.Min(val, ticks); long num5 = (long)((double)num + (double)(num4 - num2) * num3); dictionary["StartTicks"] = num4; dictionary["BaseTime"] = num5; dictionary["Scale"] = 1.0; } } public void SetScaleUntil(double scale, DateTime until) { until = until.ToUniversalTime(); Dictionary dictionary = SUISS.Storage.Storage.Get(StorageLifecycle).GetDictionary(StorageKey); if (Timing.Instance != null && until.Ticks > DateTime.UtcNow.Ticks) { Timing.scale = scale; dictionary["Scale"] = scale; dictionary["ScaleUntilTick"] = until.Ticks; } } private void Awake() { Instance = this; RestoreTimingScale(); } } }