Pascal Serrarens 17741d862a First commit
2022-01-12 10:50:57 +01:00

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;
}
}
}