PlasticPlugin.cs 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. using System;
  2. using UnityEditor;
  3. using UnityEngine;
  4. using Codice.CM.Common;
  5. using Unity.PlasticSCM.Editor.AssetMenu;
  6. using Unity.PlasticSCM.Editor.AssetsOverlays;
  7. using Unity.PlasticSCM.Editor.AssetsOverlays.Cache;
  8. using Unity.PlasticSCM.Editor.AssetUtils.Processor;
  9. using Unity.PlasticSCM.Editor.CollabMigration;
  10. using Unity.PlasticSCM.Editor.Inspector;
  11. using Unity.PlasticSCM.Editor.ProjectDownloader;
  12. using Unity.PlasticSCM.Editor.SceneView;
  13. using Unity.PlasticSCM.Editor.UI;
  14. namespace Unity.PlasticSCM.Editor
  15. {
  16. /// <summary>
  17. /// The Plastic SCM plugin for Unity editor.
  18. /// </summary>
  19. [InitializeOnLoad]
  20. public static class PlasticPlugin
  21. {
  22. /// <summary>
  23. /// Invoked when notification status changed.
  24. /// </summary>
  25. public static event Action OnNotificationUpdated = delegate { };
  26. internal static IAssetStatusCache AssetStatusCache
  27. {
  28. get { return sAssetStatusCache; }
  29. }
  30. internal static WorkspaceOperationsMonitor WorkspaceOperationsMonitor
  31. {
  32. get { return sWorkspaceOperationsMonitor; }
  33. }
  34. static PlasticPlugin()
  35. {
  36. CloudProjectDownloader.Initialize();
  37. MigrateCollabProject.Initialize();
  38. EditorDispatcher.Initialize();
  39. CooldownWindowDelayer cooldownInitializeAction = new CooldownWindowDelayer(
  40. Enable, UnityConstants.PLUGIN_DELAYED_INITIALIZE_INTERVAL);
  41. cooldownInitializeAction.Ping();
  42. }
  43. /// <summary>
  44. /// Get the plugin icon.
  45. /// </summary>
  46. public static Texture GetPluginIcon()
  47. {
  48. return PlasticNotification.GetIcon(sNotificationStatus);
  49. }
  50. internal static void Enable()
  51. {
  52. if (sIsEnabled)
  53. return;
  54. sIsEnabled = true;
  55. PlasticApp.InitializeIfNeeded();
  56. if (!FindWorkspace.HasWorkspace(Application.dataPath))
  57. return;
  58. EnableForWorkspace();
  59. }
  60. internal static void EnableForWorkspace()
  61. {
  62. if (sIsEnabledForWorkspace)
  63. return;
  64. WorkspaceInfo wkInfo = FindWorkspace.InfoForApplicationPath(
  65. Application.dataPath,
  66. PlasticApp.PlasticAPI);
  67. if (wkInfo == null)
  68. return;
  69. sIsEnabledForWorkspace = true;
  70. PlasticApp.SetWorkspace(wkInfo);
  71. bool isGluonMode = PlasticApp.PlasticAPI.IsGluonWorkspace(wkInfo);
  72. sAssetStatusCache = new AssetStatusCache(wkInfo, isGluonMode);
  73. PlasticAssetsProcessor plasticAssetsProcessor = new PlasticAssetsProcessor();
  74. sWorkspaceOperationsMonitor = BuildWorkspaceOperationsMonitor(
  75. plasticAssetsProcessor, isGluonMode);
  76. sWorkspaceOperationsMonitor.Start();
  77. AssetsProcessors.Enable(plasticAssetsProcessor, sAssetStatusCache);
  78. AssetMenuItems.Enable();
  79. DrawAssetOverlay.Enable();
  80. DrawInspectorOperations.Enable();
  81. DrawSceneOperations.Enable(sWorkspaceOperationsMonitor);
  82. }
  83. internal static void Disable()
  84. {
  85. try
  86. {
  87. PlasticApp.Dispose();
  88. if (!sIsEnabledForWorkspace)
  89. return;
  90. sWorkspaceOperationsMonitor.Stop();
  91. AssetsProcessors.Disable();
  92. AssetMenuItems.Disable();
  93. DrawAssetOverlay.Disable();
  94. DrawInspectorOperations.Disable();
  95. DrawSceneOperations.Disable();
  96. }
  97. finally
  98. {
  99. sIsEnabled = false;
  100. sIsEnabledForWorkspace = false;
  101. }
  102. }
  103. internal static void SetNotificationStatus(
  104. PlasticWindow plasticWindow,
  105. PlasticNotification.Status status)
  106. {
  107. sNotificationStatus = status;
  108. plasticWindow.SetupWindowTitle(status);
  109. if (OnNotificationUpdated != null)
  110. OnNotificationUpdated.Invoke();
  111. }
  112. static WorkspaceOperationsMonitor BuildWorkspaceOperationsMonitor(
  113. PlasticAssetsProcessor plasticAssetsProcessor,
  114. bool isGluonMode)
  115. {
  116. WorkspaceOperationsMonitor result = new WorkspaceOperationsMonitor(
  117. PlasticApp.PlasticAPI, plasticAssetsProcessor, isGluonMode);
  118. plasticAssetsProcessor.SetWorkspaceOperationsMonitor(result);
  119. return result;
  120. }
  121. static PlasticNotification.Status sNotificationStatus;
  122. static AssetStatusCache sAssetStatusCache;
  123. static WorkspaceOperationsMonitor sWorkspaceOperationsMonitor;
  124. static bool sIsEnabled;
  125. static bool sIsEnabledForWorkspace;
  126. }
  127. }