77 lines
2.9 KiB
C#
77 lines
2.9 KiB
C#
using System.IO;
|
|
using UnityEngine;
|
|
using UnityEditor;
|
|
|
|
namespace Passer {
|
|
|
|
[InitializeOnLoad]
|
|
public class DllManager {
|
|
static DllManager() {
|
|
// Default plugins
|
|
string pluginsPath = GetPluginsPath();
|
|
InstallPlugins(pluginsPath);
|
|
|
|
// Passer Humanoid plugins
|
|
pluginsPath = "/Passer/Humanoid/Plugins/";
|
|
InstallPlugins(pluginsPath);
|
|
}
|
|
|
|
private static string GetPluginsPath() {
|
|
string pluginsPath = "/Passer/Plugins/";
|
|
|
|
// Determine in which (sub)folder DllManager has been placed
|
|
// This makes it possible to place DllManager in a different folder
|
|
string[] hcScripts = AssetDatabase.FindAssets("DllManager");
|
|
for (int i = 0; i < hcScripts.Length; i++) {
|
|
string assetPath = AssetDatabase.GUIDToAssetPath(hcScripts[i]);
|
|
if (assetPath.Length > 30 && assetPath.Substring(assetPath.Length - 21, 21) == "/Editor/DllManager.cs") {
|
|
pluginsPath = assetPath.Substring(6, assetPath.Length - 26);
|
|
}
|
|
}
|
|
|
|
return pluginsPath;
|
|
}
|
|
|
|
private static void InstallPlugins(string pluginsPath) {
|
|
string installedPath = Application.dataPath + pluginsPath;
|
|
string installablesPath = installedPath + "Installables/";
|
|
//Debug.Log("Checking for Installable plugins in " + installablesPath);
|
|
if (!Directory.Exists(installablesPath))
|
|
return;
|
|
|
|
string[] installableFileNames = Directory.GetFiles(installablesPath, "*.dll");
|
|
|
|
if (installableFileNames.Length == 0)
|
|
return;
|
|
|
|
Debug.Log("Found " + installableFileNames.Length + " installable dlls");
|
|
|
|
foreach (string installableFileName in installableFileNames) {
|
|
int nameindex = installableFileName.LastIndexOf('/') + 1;
|
|
string pluginName = installableFileName.Substring(nameindex);
|
|
bool success = InstallPlugin(installableFileName, installedPath + pluginName);
|
|
if (success == false)
|
|
return;
|
|
}
|
|
}
|
|
|
|
private static bool InstallPlugin(string sourceFileName, string destFileName) {
|
|
if (File.Exists(destFileName)) {
|
|
try {
|
|
File.Delete(destFileName);
|
|
}
|
|
catch (System.Exception) {
|
|
EditorUtility.DisplayDialog("Plugin Installation", "Please restart Unity to install new plugins", "Dismiss");
|
|
return false;
|
|
}
|
|
}
|
|
|
|
int nameindex = sourceFileName.LastIndexOf('/') + 1;
|
|
string pluginName = sourceFileName.Substring(nameindex);
|
|
Debug.Log("Installing " + pluginName);
|
|
|
|
File.Move(sourceFileName, destFileName);
|
|
return true;
|
|
}
|
|
}
|
|
} |