using UnityEditor;
using UnityEngine;
namespace Mirror.EditorScripts
{
public static class ScriptableObjectUtility
{
///
// This makes it easy to create, name and place unique new ScriptableObject asset files.
///
public static T CreateAsset(string defaultName) where T : ScriptableObject
{
string path = SavePanel(defaultName);
// user click cancel
if (string.IsNullOrEmpty(path)) { return null; }
T asset = ScriptableObject.CreateInstance();
SaveAsset(path, asset);
return asset;
}
static string SavePanel(string name)
{
string path = EditorUtility.SaveFilePanel(
"Save ScriptableObject",
"Assets/Mirror/",
name + ".asset",
"asset");
// user click cancel, return early
if (string.IsNullOrEmpty(path)) { return path; }
// Unity only wants path from Assets
if (path.StartsWith(Application.dataPath))
{
path = "Assets" + path.Substring(Application.dataPath.Length);
}
return path;
}
static void SaveAsset(string path, ScriptableObject asset)
{
string assetPathAndName = AssetDatabase.GenerateUniqueAssetPath(path);
AssetDatabase.CreateAsset(asset, assetPathAndName);
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();
}
}
}