|
- 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<string, object> 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<string, object> 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();
- }
- }
- }
|