Files
Commercialization.topon/AnyThinkPlugin/Script/IntegrationManager/Editor/ATAssetDatabaseManager.cs
2023-09-04 16:57:46 +08:00

149 lines
5.6 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Text.RegularExpressions;
using UnityEditor;
using UnityEngine;
using UnityEngine.Serialization;
using AnyThink.Scripts.IntegrationManager.Editor;
using Network = AnyThink.Scripts.IntegrationManager.Editor.Network;
using IntegrationManager = AnyThink.Scripts.IntegrationManager.Editor.ATIntegrationManager;
public class ATAssetDatabaseManager : ScriptableObject
{
public const string SettingsExportPath = "Assets/AnyThinkPlugin/Resources/Assets/ATAssetDatabaseManager.asset";
private static ATAssetDatabaseManager instance;
public Network importingNetwork = null;
public delegate void DownloadPluginProgressCallback(string pluginName, float progress, bool done);
public delegate void ImportPackageCompletedCallback(Network network);
public DownloadPluginProgressCallback downloadPluginProgressCallback;
public ImportPackageCompletedCallback importPackageCompletedCallback;
// public Network importingNetwork;
public static ATAssetDatabaseManager Instance
{
get
{
if (instance == null)
{
var settingsDir = Path.GetDirectoryName(SettingsExportPath);
if (!Directory.Exists(settingsDir))
{
Directory.CreateDirectory(settingsDir);
}
string settingsFilePath = SettingsExportPath;
instance = AssetDatabase.LoadAssetAtPath<ATAssetDatabaseManager>(settingsFilePath);
if (instance != null) return instance;
instance = CreateInstance<ATAssetDatabaseManager>();
AssetDatabase.CreateAsset(instance, settingsFilePath);
// init();
}
return instance;
}
}
private ATAssetDatabaseManager()
{
init();
}
private void init()
{
ATLog.log("ATAssetDatabaseManager inited");
AssetDatabase.importPackageCompleted += packageName =>
{
ATLog.logFormat("importPackageCompleted() >>> packageName: {0} importingNetwork: {1}", new object[] { packageName, importingNetwork });
if (!IsImportingNetwork(packageName)) return;
ATLog.log("importPackageCompleted() >>> import succeed.");
// ATConfig.saveInstalledNetworkVersion(packageName, )
// var pluginParentDir = PluginParentDirectory;
// var isPluginOutsideAssetsDir = IsPluginOutsideAssetsDirectory;
// MovePluginFilesIfNeeded(pluginParentDir, isPluginOutsideAssetsDir);
// AddLabelsToAssetsIfNeeded(pluginParentDir, isPluginOutsideAssetsDir);
AssetDatabase.Refresh();
CallImportPackageCompletedCallback(importingNetwork);
// importingNetwork = null;
setImportingNetworkNull();
};
AssetDatabase.importPackageCancelled += packageName =>
{
ATLog.logFormat("importPackageCancelled() >>> packageName: {0}", new object[] { packageName });
if (!IsImportingNetwork(packageName)) return;
// MaxSdkLogger.UserDebug("Package import cancelled.");
// importingNetwork = null;
setImportingNetworkNull();
};
AssetDatabase.importPackageFailed += (packageName, errorMessage) =>
{
ATLog.logFormat("importPackageFailed() >>> packageName: {0}, errorMsg: {1}", new object[] { packageName, errorMessage });
if (!IsImportingNetwork(packageName)) return;
// MaxSdkLogger.UserError(errorMessage);
// importingNetwork = null;
setImportingNetworkNull();
};
}
private void setImportingNetworkNull()
{
// ATPluginSetting.Instance.ImportingNetwork = null;
importingNetwork = null;
}
public void CallDownloadPluginProgressCallback(string pluginName, float progress, bool isDone)
{
if (downloadPluginProgressCallback == null) return;
downloadPluginProgressCallback(pluginName, progress, isDone);
}
public void CallImportPackageCompletedCallback(Network network)
{
ATLog.log("CallImportPackageCompletedCallback() >>> network: " + network + " importPackageCompletedCallback: " + importPackageCompletedCallback);
if (network != null)
{
ATConfig.saveInstalledNetworkVersion(network.Name, network.LatestVersions);
// ATIntegrationManager.Instance.UpdateCurrentVersions(network);
}
if (importPackageCompletedCallback == null) return;
importPackageCompletedCallback(network);
}
public string GetPluginFileName(Network network)
{
// return network.Name.ToLowerInvariant() + "_" + network.LatestVersions.Unity + ".unitypackage";
return network.PluginFileName;
}
private bool IsImportingNetwork(string packageName)
{
// Note: The pluginName doesn't have the '.unitypacakge' extension included in its name but the pluginFileName does. So using Contains instead of Equals.
//window系统packageName是项目路径/AnyThinkCoreMac系统是: AnyThinkCore
#if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN
if (packageName.Contains("\\"))
{
string[] packageNameArray = packageName.Split('\\');
if (packageNameArray != null && packageNameArray.Length > 0)
{
packageName = packageNameArray[packageNameArray.Length -1];
}
}
#endif
return importingNetwork != null && GetPluginFileName(importingNetwork).Contains(packageName);
}
}