using UnityEngine;
using UnityEditor;
using System;
using System.IO;
using System.Collections.Generic;
namespace XboxCtrlrInput.Editor {
static class PackageExporter {
static readonly string DefaultUnityPackageName = "XboxCtrlrInput"; // TODO: add auto incremental version
static readonly string[] PackageIgnoredFiles = {
"Assets/Editor/XboxCtrlrInput/PackageExporter.cs" // don't include package exporter script
};
[MenuItem("Window/XboxCtrlrInput/Export Unity Package...")]
static void ExportUnityPackage() {
string fileName = EditorUtility.SaveFilePanel("Save Unity Package", "Assets", DefaultUnityPackageName, "unitypackage");
if (string.IsNullOrEmpty(fileName)) {
return;
}
string[] assetPathNames = ListPackageFiles("Assets", PackageIgnoredFiles);
Debug.Log("Total package assets: " + assetPathNames.Length);
AssetDatabase.ExportPackage(assetPathNames, fileName);
Debug.Log("Package written to '" + fileName + "'");
}
static string[] ListPackageFiles(string rootDir, params string[] ignoredFiles) {
return ListFiles(rootDir, delegate(string path) {
// should we ignore path?
if (Array.IndexOf(ignoredFiles, path) != -1) {
return false;
}
// skip meta files
if (path.EndsWith(".meta")) {
return false;
}
// the rest is OK
return true;
});
}
#region File Helpers
private delegate bool FilenameFilter(string path);
private static string[] ListFiles(string directory, FilenameFilter filter) {
List<string> list = new List<string>();
ListFiles(list, directory, filter);
return list.ToArray();
}
private static void ListFiles(List<string> list, string directory, FilenameFilter filter) {
if (filter(directory)) {
list.Add(directory);
string[] directories = Directory.GetDirectories(directory);
foreach (string child in directories) {
ListFiles(list, child, filter);
}
string[] files = Directory.GetFiles(directory);
foreach (string file in files) {
if (filter(file)) {
list.Add(file);
}
}
}
}
#endregion
}
}