using System;
using UnityEngine;
using UnityEditor;
using Codice.CM.Common;
using Unity.PlasticSCM.Editor.AssetMenu;
using Unity.PlasticSCM.Editor.AssetUtils.Processor;
using Unity.PlasticSCM.Editor.AssetsOverlays;
using Unity.PlasticSCM.Editor.AssetsOverlays.Cache;
using Unity.PlasticSCM.Editor.CollabMigration;
using Unity.PlasticSCM.Editor.Inspector;
using Unity.PlasticSCM.Editor.ProjectDownloader;
using Unity.PlasticSCM.Editor.UI;
using Unity.PlasticSCM.Editor.SceneView;
namespace Unity.PlasticSCM.Editor
{
///
/// The Plastic SCM plugin for Unity editor.
///
[InitializeOnLoad]
public static class PlasticPlugin
{
///
/// Invoked when notification status changed.
///
public static event Action OnNotificationUpdated = delegate { };
internal static IAssetStatusCache AssetStatusCache { get; private set; }
static PlasticPlugin()
{
CloudProjectDownloader.Initialize();
MigrateCollabProject.Initialize();
EditorDispatcher.Initialize();
CooldownWindowDelayer cooldownInitializeAction = new CooldownWindowDelayer(
Enable, UnityConstants.PLUGIN_DELAYED_INITIALIZE_INTERVAL);
cooldownInitializeAction.Ping();
}
///
/// Get the plugin icon.
///
public static Texture GetPluginIcon()
{
return PlasticNotification.GetIcon(sNotificationStatus);
}
internal static void Enable()
{
if (sIsEnabled)
return;
sIsEnabled = true;
PlasticApp.InitializeIfNeeded();
if (!FindWorkspace.HasWorkspace(Application.dataPath))
return;
EnableForWorkspace();
}
internal static void EnableForWorkspace()
{
if (sIsEnabledForWorkspace)
return;
WorkspaceInfo wkInfo = FindWorkspace.InfoForApplicationPath(
Application.dataPath,
PlasticApp.PlasticAPI);
if (wkInfo == null)
return;
sIsEnabledForWorkspace = true;
PlasticApp.SetWorkspace(wkInfo);
AssetStatusCache = new AssetStatusCache(
wkInfo,
PlasticApp.PlasticAPI.IsGluonWorkspace(wkInfo));
AssetMenuItems.Enable();
AssetsProcessors.Enable();
DrawAssetOverlay.Enable();
DrawInspectorOperations.Enable();
DrawSceneOperations.Enable();
}
internal static void Disable()
{
try
{
PlasticApp.Dispose();
if (!sIsEnabledForWorkspace)
return;
AssetsProcessors.Disable();
AssetMenuItems.Disable();
DrawAssetOverlay.Disable();
DrawInspectorOperations.Disable();
DrawSceneOperations.Disable();
}
finally
{
sIsEnabled = false;
sIsEnabledForWorkspace = false;
}
}
internal static void SetNotificationStatus(
PlasticWindow plasticWindow,
PlasticNotification.Status status)
{
sNotificationStatus = status;
plasticWindow.SetupWindowTitle(status);
if (OnNotificationUpdated!=null) OnNotificationUpdated.Invoke();
}
static PlasticNotification.Status sNotificationStatus;
static bool sIsEnabled;
static bool sIsEnabledForWorkspace;
}
}