Пример #1
0
        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);
            }
        }
Пример #2
0
        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();
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }
Пример #6
0
        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);
        }
Пример #7
0
        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;
                }
            }
        }
Пример #8
0
        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();
        }