public override void GenerateResults(SpriteDatabase spriteDatabase) { if (spriteDatabase?.SpritesData == null) { return; } atlasToUsedSprites.Clear(); atlasToNotUsedSprites.Clear(); filteredAtlas = AtlasCacheUtility.GetAllKnowAtlases().Where(atlas => MatchFilter(atlas, spriteDatabase)) .OrderBy(atlas => atlas.name).ToArray(); SpriteData[] validSprites = spriteDatabase.SpritesData.Where(ValidSpriteData).Where(data => data.IsInsideAtlas()) .OrderBy(data => data.Sprite.name).ToArray(); for (int i = 0; i < filteredAtlas.Length; i++) { SpriteAtlas atlas = filteredAtlas[i]; SpriteData[] usedSpritesFromThisAtlas = validSprites.Where(data => data.IsInsideAtlas() && data.SpriteAtlas == atlas && MatchSearch(data.Sprite.name)).ToArray(); atlasToUsedSprites.Add(atlas, usedSpritesFromThisAtlas); Sprite[] spritesInsideAtlas = AtlasCacheUtility.GetAllSpritesFromAtlas(atlas) .Where(sprite => MatchSearch(sprite.name)).ToArray(); Sprite[] notUSedSprites = spritesInsideAtlas.Where(sprite => usedSpritesFromThisAtlas.All(data => data.Sprite != sprite)).ToArray(); atlasToNotUsedSprites.Add(atlas, notUSedSprites); } }
private void DrawResults() { if (SpriteAuditorUtility.IsMemoryDataDirty) { LoadOrCreateAtlasResult(); } if (SpriteDatabase == null) { return; } EditorGUILayout.BeginVertical("Box"); EditorGUILayout.LabelField("Results", EditorStyles.toolbarDropDown); EditorGUILayout.Space(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.BeginHorizontal("Box"); EditorGUI.BeginChangeCheck(); visualizationType = (VisualizationType)GUILayout.SelectionGrid((int)visualizationType, VISUALIZATION_NAMES, 3, EditorStyles.radioButton); if (EditorGUI.EndChangeCheck()) { CreateResultViewByVisualizationType(); SpriteAuditorUtility.SetResultViewDirty(); } EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal("Box"); ResultView.DrawFilterOptions(); EditorGUILayout.EndHorizontal(); EditorGUILayout.EndHorizontal(); if (SpriteAuditorUtility.IsReferencesDirty) { AtlasCacheUtility.ClearAtlasCache(); ResultView.GenerateResults(SpriteDatabase); SpriteAuditorUtility.SetResultViewUpdated(); } ResultView.DrawResults(SpriteDatabase); EditorGUILayout.EndVertical(); }
private void StartRecording() { if (isRecording) { return; } isRecording = true; AtlasCacheUtility.ClearAtlasCache(); LoadOrCreateAtlasResult(); SpriteDatabase.PrepareForRun(); GameObject spriteAuditorGameObject = new GameObject("Sprite Auditor Forwarder"); spriteAuditorEventForwarder = spriteAuditorGameObject.AddComponent <SpriteAuditorEventForwarder>(); spriteAuditorEventForwarder.SetListener(spriteFinder); DontDestroyOnLoad(spriteAuditorEventForwarder.gameObject); }
private void DrawSettings() { EditorGUI.BeginDisabledGroup(isRecording); EditorGUILayout.BeginVertical("Box"); EditorGUILayout.LabelField("Settings", EditorStyles.toolbarDropDown); EditorGUILayout.Space(); recordOnPlay = EditorGUILayout.Toggle("Record on play", recordOnPlay); EditorGUI.BeginChangeCheck(); spriteUsageSizeThreshold = EditorGUILayout.Slider("Allowed Size Variation", spriteUsageSizeThreshold, 0, 2); if (EditorGUI.EndChangeCheck()) { SpriteAuditorUtility.SetSizeCheckThreshold(spriteUsageSizeThreshold); SpriteDatabase.SizeCheckThresholdChanged(); //TODO //SpriteDatabase.SetAllowedSizeVariation(spriteUsageSizeThreshold); } EditorGUILayout.BeginHorizontal(); EditorGUI.BeginDisabledGroup(!EditorPrefs.HasKey(ATLAS_AUDITOR_STORAGE_KEY)); if (GUILayout.Button("Clear Cache", EditorStyles.toolbarButton)) { ClearCache(); } if (GUILayout.Button("Pack Atlases", EditorStyles.toolbarButton)) { SpriteAtlasUtility.PackAllAtlases(EditorUserBuildSettings.activeBuildTarget); } if (GUILayout.Button("Refresh Atlases", EditorStyles.toolbarButton)) { AtlasCacheUtility.CacheKnowAtlases(); } EditorGUI.EndDisabledGroup(); EditorGUILayout.EndHorizontal(); EditorGUILayout.EndVertical(); EditorGUI.EndDisabledGroup(); }
private static bool TryToRemoveSpriteFromAnyAtlasReference(Sprite targetSprite) { bool anyReferenceChanged = false; if (AtlasCacheUtility.TryGetAtlasesForSprite(targetSprite, out List <SpriteAtlas> spriteAtlases)) { for (int i = 0; i < spriteAtlases.Count; i++) { SpriteAtlas spriteAtlas = spriteAtlases[i]; if (!AtlasCacheUtility.TryRemoveSpriteFromAtlas(targetSprite, spriteAtlas)) { anyReferenceChanged = true; } } } return(anyReferenceChanged); }
private bool MatchFilter(Sprite sprite) { if (!MatchSearch(sprite.name)) { return(false); } if (currentFilter.HasFlag(Filter.WithSizeWarnings)) { return(false); } if (currentFilter.HasFlag(Filter.UsedInOneScene)) { return(false); } if (currentFilter.HasFlag(Filter.UsedBiggerThanSpriteSize)) { return(false); } if (currentFilter.HasFlag(Filter.UsedSmallerThanSpriteSize)) { return(false); } if (currentFilter.HasFlag(Filter.UsedInMoreThanOneScene)) { return(false); } if (currentFilter.HasFlag(Filter.InsideAnyAtlas)) { if (AtlasCacheUtility.TryGetAtlasForSprite(sprite, out SpriteAtlas atlas)) { return(true); } return(false); } return(true); }
public SpriteData(Sprite targetSprite) { cachedSprite = targetSprite; spriteName = cachedSprite.name; spriteTexturePath = AssetDatabase.GetAssetPath(cachedSprite); spriteTextureGUID = AssetDatabase.AssetPathToGUID(spriteTexturePath); if (string.Equals(spriteTexturePath, RESOURCES_UNITY_BUILTIN_EXTRA_PATH)) { spriteUsageFlags |= SpriteUsageFlags.DefaultUnityAsset; return; } if (AtlasCacheUtility.TryGetAtlasForSprite(cachedSprite, out SpriteAtlas spriteAtlas)) { cachedSpriteAtlas = spriteAtlas; spriteAtlasGUID = AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(spriteAtlas)); if (AtlasCacheUtility.TryGetAtlasScale(spriteAtlas, out atlasScale)) { spriteUsageFlags |= SpriteUsageFlags.UsingScaledAtlasSize; } } }
public void CheckAtlasData() { if (Sprite == null) { return; } cachedSpriteAtlas = null; spriteUsageFlags &= ~SpriteUsageFlags.UsingScaledAtlasSize; if (AtlasCacheUtility.TryGetAtlasForSprite(cachedSprite, out SpriteAtlas spriteAtlas)) { cachedSpriteAtlas = spriteAtlas; atlasScale = spriteAtlas.GetVariantScale(); if (atlasScale != 1.0f) { spriteUsageFlags |= SpriteUsageFlags.UsingScaledAtlasSize; } } else { cachedSpriteAtlas = null; } }
private void DrawSettings() { EditorGUI.BeginDisabledGroup(isRecording); EditorGUILayout.BeginVertical("Box"); EditorGUILayout.LabelField("Settings", EditorStyles.toolbarDropDown); EditorGUILayout.Space(); EditorGUI.BeginChangeCheck(); recordOnUpdate = EditorGUILayout.Toggle("Record Automatically", recordOnUpdate); if (EditorGUI.EndChangeCheck()) { spriteFinder.SetCaptureOnUpdate(recordOnUpdate); } if (recordOnUpdate) { EditorGUI.BeginChangeCheck(); frameInterval = EditorGUILayout.IntField("Frame Interval", frameInterval); if (EditorGUI.EndChangeCheck()) { spriteFinder.SetFrameInterval(frameInterval); } } else { bool guiWasEnabled = GUI.enabled; GUI.enabled = true; if (GUILayout.Button("Capture Frame")) { spriteFinder.CaptureFrame(); } GUI.enabled = guiWasEnabled; } EditorGUI.BeginChangeCheck(); spriteUsageSizeThreshold = EditorGUILayout.Slider("Allowed Size Variation", spriteUsageSizeThreshold, 0, 2); if (EditorGUI.EndChangeCheck()) { SpriteAuditorUtility.SetSizeCheckThreshold(spriteUsageSizeThreshold); SpriteDatabase.SizeCheckThresholdChanged(); } EditorGUILayout.BeginHorizontal(); EditorGUI.BeginDisabledGroup(!EditorPrefs.HasKey(ATLAS_AUDITOR_STORAGE_KEY)); if (GUILayout.Button("Clear Cache", EditorStyles.toolbarButton)) { ClearCache(); } if (GUILayout.Button("Pack Atlases", EditorStyles.toolbarButton)) { SpriteAtlasUtility.PackAllAtlases(EditorUserBuildSettings.activeBuildTarget); } if (GUILayout.Button("Refresh Atlases", EditorStyles.toolbarButton)) { AtlasCacheUtility.CacheKnowAtlases(); } EditorGUI.EndDisabledGroup(); EditorGUILayout.EndHorizontal(); EditorGUILayout.EndVertical(); EditorGUI.EndDisabledGroup(); }