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); }
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); }
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(); }