You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

63 regels
2.2 KiB

  1. using SUISS.Storage;
  2. using System;
  3. using System.Collections.Generic;
  4. using UnityEngine;
  5. namespace SUISS.Scheduling
  6. {
  7. public class TimingScaleRestore : MonoBehaviour
  8. {
  9. [SerializeField]
  10. private StorageLifecycle StorageLifecycle = StorageLifecycle.Game;
  11. [SerializeField]
  12. private string StorageKey = "Timing";
  13. private const string StoredScaleKey = "Scale";
  14. private const string ScaleUntilKey = "ScaleUntilTick";
  15. public static TimingScaleRestore Instance
  16. {
  17. get;
  18. private set;
  19. }
  20. public void RestoreTimingScale()
  21. {
  22. Dictionary<string, object> dictionary = SUISS.Storage.Storage.Get(StorageLifecycle).GetDictionary(StorageKey);
  23. if (dictionary.ContainsKey("Scale") && dictionary.ContainsKey("StartTicks") && dictionary.ContainsKey("BaseTime") && dictionary.ContainsKey("ScaleUntilTick"))
  24. {
  25. long num = (long)dictionary["BaseTime"];
  26. long num2 = (long)dictionary["StartTicks"];
  27. double num3 = (double)dictionary["Scale"];
  28. long val = (long)dictionary["ScaleUntilTick"];
  29. long ticks = DateTime.UtcNow.Ticks;
  30. long num4 = Math.Min(val, ticks);
  31. long num5 = (long)((double)num + (double)(num4 - num2) * num3);
  32. dictionary["StartTicks"] = num4;
  33. dictionary["BaseTime"] = num5;
  34. dictionary["Scale"] = 1.0;
  35. }
  36. }
  37. public void SetScaleUntil(double scale, DateTime until)
  38. {
  39. until = until.ToUniversalTime();
  40. Dictionary<string, object> dictionary = SUISS.Storage.Storage.Get(StorageLifecycle).GetDictionary(StorageKey);
  41. if (Timing.Instance != null && until.Ticks > DateTime.UtcNow.Ticks)
  42. {
  43. Timing.scale = scale;
  44. dictionary["Scale"] = scale;
  45. dictionary["ScaleUntilTick"] = until.Ticks;
  46. }
  47. }
  48. private void Awake()
  49. {
  50. Instance = this;
  51. RestoreTimingScale();
  52. }
  53. }
  54. }