using UnityEngine;
|
using UnityEditor;
|
|
namespace Beebyte.Obfuscator
|
{
|
public class OptionsManager
|
{
|
public const string ImportAssetName = "ObfuscatorOptionsImport";
|
public const string OptionsAssetName = "ObfuscatorOptions";
|
|
public const string DefaultImportPath = @"Assets/Editor/Beebyte/Obfuscator/ObfuscatorOptionsImport.asset";
|
public const string DefaultOptionsPath = @"Assets/Editor/Beebyte/Obfuscator/ObfuscatorOptions.asset";
|
|
public static Options LoadOptions()
|
{
|
if (HasInstallFiles()) Install();
|
|
Options o = LoadAsset(OptionsAssetName);
|
|
if (o != null) return o;
|
|
Debug.LogError("Failed to load " + OptionsAssetName + " asset at " + DefaultOptionsPath);
|
return null;
|
}
|
|
private static bool HasInstallFiles()
|
{
|
return LoadAsset(ImportAssetName) != null;
|
}
|
|
private static Options LoadAsset(string name)
|
{
|
string path = GetAssetPath(name);
|
|
return LoadAssetAtPath(path);
|
}
|
|
private static void Install()
|
{
|
Options importOptions = LoadAsset(ImportAssetName);
|
if (importOptions == null)
|
{
|
Debug.LogError("Could not find " + ImportAssetName + ".asset - aborting installation.");
|
return;
|
}
|
|
string importPath = GetAssetPath(ImportAssetName);
|
string newOptionsPath = GetInstallPathFromImport(importPath);
|
|
Options o = LoadAssetAtPath(newOptionsPath);
|
|
if (o != null)
|
{
|
bool overwrite = EditorUtility.DisplayDialog("Obfuscator Installation", "ObfuscatorOptions already exists, would you like to replace it with new default options?", "Use new defaults", "Keep existing settings");
|
if (overwrite) AssetDatabase.MoveAssetToTrash(newOptionsPath);
|
else
|
{
|
AssetDatabase.MoveAssetToTrash(importPath);
|
return;
|
}
|
}
|
|
//Copy & Delete instead of Move, otherwise future installs think that ObfuscatorOptions is actually ObfuscatorOptionsImport
|
AssetDatabase.CopyAsset(importPath, newOptionsPath);
|
AssetDatabase.DeleteAsset(importPath);
|
AssetDatabase.Refresh();
|
}
|
|
private static string GetDefaultPath(string assetName)
|
{
|
if (ImportAssetName.Equals(assetName)) return DefaultImportPath;
|
if (OptionsAssetName.Equals(assetName)) return DefaultOptionsPath;
|
return null;
|
}
|
|
#if UNITY_3_1 || UNITY_3_2 || UNITY_3_3 || UNITY_3_4 || UNITY_3_5 || UNITY_4_0 || UNITY_4_1 || UNITY_4_2 || UNITY_4_3 || UNITY_4_5 || UNITY_4_6 || UNITY_4_7 || UNITY_4_8 || UNITY_4_9 || UNITY_5_0 || UNITY_5_1
|
private static string GetAssetPath(string name)
|
{
|
return GetDefaultPath(name);
|
}
|
|
private static Options LoadAssetAtPath(string path)
|
{
|
return (Options)Resources.LoadAssetAtPath(path, typeof(Options));
|
}
|
#else
|
private static string GetAssetPath(string name)
|
{
|
string guid = SearchForAssetGuid(name);
|
|
return guid != null ? AssetDatabase.GUIDToAssetPath(guid) : null;
|
}
|
|
private static Options LoadAssetAtPath(string path)
|
{
|
return AssetDatabase.LoadAssetAtPath<Options>(path);
|
}
|
|
private static string SearchForAssetGuid(string assetName)
|
{
|
string[] optionPaths = AssetDatabase.FindAssets(assetName);
|
|
if (optionPaths.Length == 0) return null;
|
if (optionPaths.Length == 1) return optionPaths[0];
|
|
Debug.LogError("Multiple " + assetName + " assets found! Aborting");
|
return null;
|
}
|
#endif
|
|
private static string GetInstallPathFromImport(string importPath)
|
{
|
return importPath.Replace(ImportAssetName + ".asset", OptionsAssetName + ".asset");
|
}
|
}
|
}
|