popcorn/ReferenceViewer/Editor/Generate.cs

64 lines
2.2 KiB
C#
Executable File

using System;
using System.IO;
using System.Linq;
using UnityEditor;
using UnityEngine;
using Object = UnityEngine.Object;
namespace ReferenceViewer
{
public class Generate
{
private static float progress;
public static void Build(string[] assetPaths, Action<AssetData[]> callback = null)
{
EditorUtility.ClearProgressBar();
var result = new AssetData[0];
EditorApplication.LockReloadAssemblies();
assetPaths = assetPaths.OrderBy(path => Path.GetExtension(path)).ToArray();
for (var i = 0; i < assetPaths.Length; i++)
{
var assetPath = assetPaths[i];
if (assetPath.StartsWith("Assets/") == false)
continue;
progress = (float) i / assetPaths.Length;
var obj = AssetDatabase.LoadAssetAtPath(assetPath, typeof(Object));
DisplayProgressBar(assetPath, progress);
AssetData assetData = null;
switch (Path.GetExtension(assetPath))
{
case PrefabAssetData.extension:
assetData = new PrefabAssetData(assetPath);
break;
case SceneAssetData.extension:
assetData = new SceneAssetData(assetPath);
break;
case AnimationControllerAssetData.extension:
assetData = new AnimationControllerAssetData(assetPath);
break;
default:
assetData = new AssetData(assetPath);
break;
}
assetData.AddAssetData(obj);
ArrayUtility.Add(ref result, assetData);
}
callback(result);
EditorApplication.UnlockReloadAssemblies();
EditorUtility.ClearProgressBar();
}
protected static void DisplayProgressBar(string path, float progress)
{
EditorUtility.DisplayProgressBar(Path.GetFileName(path),
Mathf.FloorToInt(progress * 100) + "% - " + Path.GetFileName(path), progress);
}
}
}