Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        /// <summary>
        /// <para>Initializes the <see cref="AssetIconsMain"/> class.</para>
        /// </summary>
        internal AssetDrawerFactoryLibrary(AssetIconPipeline pipeline)
        {
            this.pipeline = pipeline;

            factories = BuildAssetDrawers(pipeline);
        }
Exemple #4
0
 /// <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;
 }