Brak opisu
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.

AdaptivePerformanceGeneralSettingsPerBuildTarget.cs 5.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using UnityEngine;
  5. using UnityEngine.AdaptivePerformance;
  6. using UnityEditor.AdaptivePerformance.Editor.Metadata;
  7. namespace UnityEditor.AdaptivePerformance.Editor
  8. {
  9. #if UNITY_EDITOR
  10. [InitializeOnLoad]
  11. #endif
  12. /// <summary>
  13. /// Container class that holds general settings for each build target group installed in Unity.
  14. /// </summary>
  15. public class AdaptivePerformanceGeneralSettingsPerBuildTarget : ScriptableObject, ISerializationCallbackReceiver
  16. {
  17. [SerializeField]
  18. List<BuildTargetGroup> Keys = new List<BuildTargetGroup>();
  19. [SerializeField]
  20. List<AdaptivePerformanceGeneralSettings> Values = new List<AdaptivePerformanceGeneralSettings>();
  21. Dictionary<BuildTargetGroup, AdaptivePerformanceGeneralSettings> Settings = new Dictionary<BuildTargetGroup, AdaptivePerformanceGeneralSettings>();
  22. #if UNITY_EDITOR
  23. static AdaptivePerformanceGeneralSettingsPerBuildTarget()
  24. {
  25. EditorApplication.playModeStateChanged += PlayModeStateChanged;
  26. }
  27. void OnEnable()
  28. {
  29. foreach (var setting in Settings.Values)
  30. {
  31. var assignedSettings = setting.AssignedSettings;
  32. if (assignedSettings == null)
  33. continue;
  34. var filteredLoaders = from ldr in assignedSettings.loaders where ldr != null select ldr;
  35. assignedSettings.loaders = filteredLoaders.ToList<AdaptivePerformanceLoader>();
  36. }
  37. AdaptivePerformanceGeneralSettings.Instance = AdaptivePerformanceGeneralSettingsForBuildTarget(BuildTargetGroup.Standalone);
  38. }
  39. static void PlayModeStateChanged(PlayModeStateChange state)
  40. {
  41. AdaptivePerformanceGeneralSettingsPerBuildTarget buildTargetSettings = null;
  42. EditorBuildSettings.TryGetConfigObject(AdaptivePerformanceGeneralSettings.k_SettingsKey, out buildTargetSettings);
  43. if (buildTargetSettings == null)
  44. return;
  45. AdaptivePerformanceGeneralSettings instance = buildTargetSettings.SettingsForBuildTarget(BuildTargetGroup.Standalone);
  46. if (instance == null || !instance.InitManagerOnStart)
  47. return;
  48. instance.InternalPlayModeStateChanged(state);
  49. }
  50. internal static bool ContainsLoaderForAnyBuildTarget(string loaderTypeName)
  51. {
  52. AdaptivePerformanceGeneralSettingsPerBuildTarget buildTargetSettings = null;
  53. EditorBuildSettings.TryGetConfigObject(AdaptivePerformanceGeneralSettings.k_SettingsKey, out buildTargetSettings);
  54. if (buildTargetSettings == null)
  55. return false;
  56. foreach (var settings in buildTargetSettings.Settings.Values)
  57. {
  58. if (AdaptivePerformancePackageMetadataStore.IsLoaderAssigned(settings.Manager, loaderTypeName))
  59. return true;
  60. }
  61. return false;
  62. }
  63. #endif
  64. /// <summary>
  65. /// Set specific settings for a given build target.
  66. /// </summary>
  67. /// <param name="targetGroup">An enum that specifies which platform group this build is for.</param>
  68. /// <param name="settings">An instance of <see cref="AdaptivePerformanceGeneralSettings"/> to assign for the given key.</param>
  69. public void SetSettingsForBuildTarget(BuildTargetGroup targetGroup, AdaptivePerformanceGeneralSettings settings)
  70. {
  71. // Ensures the editor's "runtime instance" is the most current for standalone settings
  72. if (targetGroup == BuildTargetGroup.Standalone)
  73. AdaptivePerformanceGeneralSettings.Instance = settings;
  74. Settings[targetGroup] = settings;
  75. }
  76. /// <summary>Get specific settings for a given build target.</summary>
  77. /// <param name="targetGroup">An enum that specifies which platform group this build is for.</param>
  78. /// <returns>The instance of <see cref="AdaptivePerformanceGeneralSettings"/> assigned to the key, or null if no instance is assigned.</returns>
  79. public AdaptivePerformanceGeneralSettings SettingsForBuildTarget(BuildTargetGroup targetGroup)
  80. {
  81. AdaptivePerformanceGeneralSettings ret = null;
  82. Settings.TryGetValue(targetGroup, out ret);
  83. return ret;
  84. }
  85. /// <summary>Serialization override.</summary>
  86. public void OnBeforeSerialize()
  87. {
  88. Keys.Clear();
  89. Values.Clear();
  90. foreach (var kv in Settings)
  91. {
  92. Keys.Add(kv.Key);
  93. Values.Add(kv.Value);
  94. }
  95. }
  96. /// <summary>Serialization override.</summary>
  97. public void OnAfterDeserialize()
  98. {
  99. Settings = new Dictionary<BuildTargetGroup, AdaptivePerformanceGeneralSettings>();
  100. for (int i = 0; i < Math.Min(Keys.Count, Values.Count); i++)
  101. {
  102. Settings.Add(Keys[i], Values[i]);
  103. }
  104. }
  105. /// <summary>Given a build target, get the general settings container assigned to it.</summary>
  106. /// <param name="targetGroup">An enum that specifies which platform group this build is for.</param>
  107. /// <returns>The instance of <see cref="AdaptivePerformanceGeneralSettings"/> assigned to the key, or null if no instance is assigned.</returns>
  108. public static AdaptivePerformanceGeneralSettings AdaptivePerformanceGeneralSettingsForBuildTarget(BuildTargetGroup targetGroup)
  109. {
  110. AdaptivePerformanceGeneralSettingsPerBuildTarget buildTargetSettings = null;
  111. EditorBuildSettings.TryGetConfigObject(AdaptivePerformanceGeneralSettings.k_SettingsKey, out buildTargetSettings);
  112. if (buildTargetSettings == null)
  113. return null;
  114. return buildTargetSettings.SettingsForBuildTarget(targetGroup);
  115. }
  116. }
  117. }