private static Dictionary <Type, AssetDrawerFactory> BuildAssetDrawers(AssetIconPipeline pipeline) { var assetDrawerFactories = new Dictionary <Type, AssetDrawerFactory>(); var graphicSourceSelection = new List <GraphicSource>(); var checkAssemblies = AppDomain.CurrentDomain.GetAssemblies(); foreach (var assembly in GetDependentAssemblies(AppDomain.CurrentDomain, typeof(AssetIconAttribute).Assembly)) { Type[] assemblyTypes; try { assemblyTypes = assembly.GetTypes(); } catch { continue; } #if !UNITY_2017_1_OR_NEWER string assemblyName = assembly.FullName.Substring(0, assembly.FullName.IndexOf(',')); if (assemblyName != "Assembly-UnityScript" && assemblyName != "Assembly-CSharp" && assemblyName != "Assembly-CSharp-Editor") { continue; } #endif foreach (var type in assemblyTypes) { if (!typeof(ScriptableObject).IsAssignableFrom(type)) { continue; } graphicSourceSelection.Clear(); var typeMembers = type.GetMembers(); foreach (var member in typeMembers) { var selector = new GraphicSourceSelector(); selector.CollectGraphicsFromMember(member, graphicSourceSelection); } if (graphicSourceSelection.Count != 0) { graphicSourceSelection.Sort(); assetDrawerFactories.Add(type, new AssetDrawerFactory(pipeline, graphicSourceSelection.ToArray())); } } } return(assetDrawerFactories); }
static AssetIconsMain() { AssetIconsProjectHooks.OnInternalDrawIcon += ItemOnGUI; var extensions = new List <IAssetIconsExtension>(); var checkAssemblies = AppDomain.CurrentDomain.GetAssemblies(); foreach (var assembly in checkAssemblies) { Type[] assemblyTypes; try { assemblyTypes = assembly.GetTypes(); } catch { continue; } #if !UNITY_2017_1_OR_NEWER string assemblyName = assembly.FullName.Substring(0, assembly.FullName.IndexOf(',')); if (assemblyName != "Assembly-UnityScript" && assemblyName != "Assembly-CSharp" && assemblyName != "Assembly-CSharp-Editor") { continue; } #endif foreach (var type in assemblyTypes) { if (!typeof(IAssetIconsExtension).IsAssignableFrom(type)) { continue; } if (type.IsAbstract || type.IsInterface) { continue; } var instance = (IAssetIconsExtension)Activator.CreateInstance(type); extensions.Add(instance); } } pipeline = new AssetIconPipeline(extensions); }
/// <summary> /// <para>Initializes the <see cref="AssetIconsMain"/> class.</para> /// </summary> internal AssetDrawerFactoryLibrary(AssetIconPipeline pipeline) { this.pipeline = pipeline; factories = BuildAssetDrawers(pipeline); }
/// <summary> /// <para>Constructs a new AssetDrawer with a collection of graphics.</para> /// </summary> /// <param name="elements">A collection of graphics that make up this drawer.</param> public AssetDrawerFactory(AssetIconPipeline pipeline, GraphicSource[] elements) { this.pipeline = pipeline; this.elements = elements; }