static MonoCreateAssetItem[] ExtractCreateAssetMenuItems(Assembly assembly)
{
var result = new List <MonoCreateAssetItem>();
foreach (var type in EditorAssemblies.GetAllTypesWithAttribute <CreateAssetMenuAttribute>())
{
var attr = type.GetCustomAttributes(typeof(CreateAssetMenuAttribute), false).FirstOrDefault() as CreateAssetMenuAttribute;
if (attr == null)
{
continue;
}
if (!type.IsSubclassOf(typeof(ScriptableObject)))
{
Debug.LogWarningFormat("CreateAssetMenu attribute on {0} will be ignored as {0} is not derived from ScriptableObject.", type.FullName);
continue;
}
string menuItemName = (string.IsNullOrEmpty(attr.menuName)) ? ObjectNames.NicifyVariableName(type.Name) : attr.menuName;
string fileName = (string.IsNullOrEmpty(attr.fileName)) ? ("New " + ObjectNames.NicifyVariableName(type.Name) + ".asset") : attr.fileName;
if (!System.IO.Path.HasExtension(fileName))
{
fileName = fileName + ".asset";
}
var item = new MonoCreateAssetItem
{
menuItem = menuItemName,
fileName = fileName,
order = attr.order,
type = type
};
result.Add(item);
}
return(result.ToArray());
}