MainThreadDataCache.cs 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. // Copyright (c) 2025 TerraByte Inc.
  2. //
  3. // A new utility class that uses [InitializeOnLoad] to safely cache data
  4. // from Unity's main thread that is needed by background threads.
  5. using System.IO;
  6. using UnityEngine;
  7. using UnityEditor;
  8. using UnityEngine.Scripting;
  9. using Terra.Arbitrator.Settings;
  10. namespace Terra.Arbitrator.Services
  11. {
  12. [Preserve]
  13. [InitializeOnLoad]
  14. public static class MainThreadDataCache
  15. {
  16. /// <summary>
  17. /// A thread-safe, cached path to the project's root directory.
  18. /// </summary>
  19. public static string ProjectRoot { get; private set; }
  20. public static string UserName { get; private set; }
  21. public static string EmailAddress { get; private set; }
  22. public static string AuthUsername { get; private set; }
  23. public static string AuthPassword { get; private set; }
  24. static MainThreadDataCache()
  25. {
  26. ProjectRoot = Directory.GetParent(Application.dataPath)?.FullName;
  27. EditorApplication.update += UpdatePrefValues;
  28. UpdatePrefValues();
  29. }
  30. private static void UpdatePrefValues()
  31. {
  32. UserName = EditorPrefs.GetString(BetterGitSettings.UsernameKey, string.Empty);
  33. EmailAddress = EditorPrefs.GetString(BetterGitSettings.EmailKey, string.Empty);
  34. AuthUsername = EditorPrefs.GetString(BetterGitSettings.AuthUsernameKey, string.Empty);
  35. AuthPassword = EditorPrefs.GetString(BetterGitSettings.AuthPasswordKey, string.Empty);
  36. }
  37. }
  38. }