예제 #1
0
        private bool MatchFilter(SpriteAtlas atlas, SpriteDatabase spriteDatabase)
        {
            if (currentFilter.HasFlag(Filter.IncludedInBuild))
            {
                if (!atlas.IsIncludedInBuild())
                {
                    return(false);
                }
            }

            if (currentFilter.HasFlag(Filter.IsVariant))
            {
                if (!atlas.isVariant)
                {
                    return(false);
                }
            }

            if (currentFilter.HasFlag(Filter.WithUsagesFound))
            {
                for (int i = 0; i < spriteDatabase.SpritesData.Count; i++)
                {
                    SpriteData spriteData = spriteDatabase.SpritesData[i];
                    if (!spriteData.IsInsideAtlas())
                    {
                        continue;
                    }

                    if (spriteData.SpriteAtlas == atlas)
                    {
                        return(true);
                    }
                }
                return(false);
            }

            return(true);
        }
예제 #2
0
        private bool MatchFilter(SpriteData data)
        {
            if (!MatchSearch(data.Sprite.name))
            {
                return(false);
            }

            if (currentFilter.HasFlag(Filter.UsedSmallerThanSpriteSize))
            {
                if (!data.SpriteUsageFlags.HasFlag(SpriteUsageFlags.UsedSmallerThanSpriteRect))
                {
                    return(false);
                }
            }

            if (currentFilter.HasFlag(Filter.UsedBiggerThanSpriteSize))
            {
                if (!data.SpriteUsageFlags.HasFlag(SpriteUsageFlags.UsedBiggerThanSpriteRect))
                {
                    return(false);
                }
            }

            if (currentFilter.HasFlag(Filter.UsedOnlyOnOneScenes))
            {
                if (data.SceneAssets.Count > 1)
                {
                    return(false);
                }
            }

            if (currentFilter.HasFlag(Filter.UnableToDetectAllSizes))
            {
                if (!data.SpriteUsageFlags.HasFlag(SpriteUsageFlags.CantDiscoveryAllUsageSize))
                {
                    return(false);
                }
            }

            if (currentFilter.HasFlag(Filter.SingleSprites))
            {
                if (data.TextureImporter == null || data.TextureImporter.spriteImportMode != SpriteImportMode.Single)
                {
                    return(false);
                }
            }

            if (currentFilter.HasFlag(Filter.MultipleSprites))
            {
                if (data.TextureImporter == null || data.TextureImporter.spriteImportMode != SpriteImportMode.Multiple)
                {
                    return(false);
                }
            }

            if (currentFilter.HasFlag(Filter.InsideAtlasSprites))
            {
                if (!data.IsInsideAtlas())
                {
                    return(false);
                }
            }

            if (currentFilter.HasFlag(Filter.InsideScaledAtlasVariant))
            {
                if (!data.SpriteUsageFlags.HasFlag(SpriteUsageFlags.UsingScaledAtlasSize))
                {
                    return(false);
                }
            }

            return(true);
        }
예제 #3
0
        public override void GenerateResults(SpriteDatabase spriteDatabase)
        {
            //This method is kinda of dumb doing a lot of repetitive task, but its just easier to read this way
            HashSet <SceneAsset> usedScenes = new HashSet <SceneAsset>();

            SpriteData[] validSprites = spriteDatabase.SpritesData
                                        .Where(ValidSpriteData)
                                        .Where(MatchFilter)
                                        .OrderBy(data => data.Sprite.name)
                                        .ToArray();

            for (int i = 0; i < validSprites.Length; i++)
            {
                SpriteData spriteData = validSprites[i];

                IEnumerable <SceneAsset> uniqueScenes = spriteData.SceneAssets.Distinct();
                foreach (SceneAsset uniqueScene in uniqueScenes)
                {
                    usedScenes.Add(uniqueScene);
                }
            }

            sceneToSingleSprites.Clear();
            foreach (SceneAsset sceneAsset in usedScenes)
            {
                sceneToSingleSprites.Add(sceneAsset, validSprites
                                         .Where(spriteData => !spriteData.IsInsideAtlas())
                                         .Where(spriteData => spriteData.SceneAssets.Contains(sceneAsset)).Distinct().ToArray());
            }

            sceneToAtlasToUsedSprites.Clear();
            foreach (SpriteData spriteData in validSprites)
            {
                if (!spriteData.IsInsideAtlas())
                {
                    continue;
                }

                foreach (SceneAsset sceneAsset  in spriteData.SceneAssets)
                {
                    if (!sceneToAtlasToUsedSprites.ContainsKey(sceneAsset))
                    {
                        sceneToAtlasToUsedSprites.Add(sceneAsset, new Dictionary <SpriteAtlas, HashSet <SpriteData> >());
                    }

                    SpriteAtlas spriteAtlas = spriteData.SpriteAtlas;
                    if (!sceneToAtlasToUsedSprites[sceneAsset].ContainsKey(spriteAtlas))
                    {
                        sceneToAtlasToUsedSprites[sceneAsset].Add(spriteAtlas, new HashSet <SpriteData>());
                    }

                    sceneToAtlasToUsedSprites[sceneAsset][spriteAtlas].Add(spriteData);
                }
            }

            sceneToSingleSprites.Add(SpriteAuditorUtility.DontDestroyOnLoadSceneAsset, validSprites
                                     .Where(data => data.SpriteUsageFlags.HasFlag(SpriteUsageFlags.UsedOnDontDestroyOrUnknowScene) &&
                                            !data.IsInsideAtlas()).Distinct().ToArray());

            sceneToAtlasToUsedSprites.Add(SpriteAuditorUtility.DontDestroyOnLoadSceneAsset, new Dictionary <SpriteAtlas, HashSet <SpriteData> >());

            IEnumerable <SpriteData> spritesInsideAtlas = validSprites
                                                          .Where(data => data.SpriteUsageFlags.HasFlag(SpriteUsageFlags.UsedOnDontDestroyOrUnknowScene) &&
                                                                 data.IsInsideAtlas()).Distinct();

            foreach (SpriteData spriteInsideAtlas in spritesInsideAtlas)
            {
                if (!sceneToAtlasToUsedSprites[SpriteAuditorUtility.DontDestroyOnLoadSceneAsset]
                    .ContainsKey(spriteInsideAtlas.SpriteAtlas))
                {
                    sceneToAtlasToUsedSprites[SpriteAuditorUtility.DontDestroyOnLoadSceneAsset]
                    .Add(spriteInsideAtlas.SpriteAtlas, new HashSet <SpriteData>());
                }

                sceneToAtlasToUsedSprites[SpriteAuditorUtility.DontDestroyOnLoadSceneAsset]
                [spriteInsideAtlas.SpriteAtlas].Add(spriteInsideAtlas);
            }

            if (sceneToSingleSprites[SpriteAuditorUtility.DontDestroyOnLoadSceneAsset].Length > 0 ||
                sceneToAtlasToUsedSprites[SpriteAuditorUtility.DontDestroyOnLoadSceneAsset].Count > 0)
            {
                usedScenes.Add(SpriteAuditorUtility.DontDestroyOnLoadSceneAsset);
            }

            uniqueUsedScenes = usedScenes.ToArray();
        }