private void OnGUI()
        {
            if (SpriteAuditorUtility.IsMemoryDataDirty)
            {
                LoadOrCreateDatabase();
            }

            if (SpriteAuditorUtility.IsIsSpriteDataDirty)
            {
                UpdateSpriteData();
            }

            if (SpriteAuditorUtility.IsSaveDataDirty)
            {
                StoreDatabase();
            }

            if (SpriteAuditorUtility.IsReferencesDirty)
            {
                ResultView.GenerateResults(SpriteDatabase);
                SpriteAuditorUtility.SetResultViewUpdated();
            }

            DrawSettings();
            DrawResults();
        }
 private void OnEnable()
 {
     EditorApplication.playModeStateChanged += OnPlayModeChanged;
     SpriteAuditorUtility.SetMemoryDataDirty();
     SpriteAuditorUtility.SetResultViewDirty();
     isOpen = true;
 }
        private void StoreDatabase()
        {
            string json = JsonWrapper.ToJson(SpriteDatabase, false);

            EditorPrefs.SetString(ATLAS_AUDITOR_STORAGE_KEY, json);
            SpriteAuditorUtility.ClearSaveDataDirty();
        }
Esempio n. 4
0
        public void CheckForSizeFlags()
        {
            if (!maximumUsageSize.HasValue)
            {
                return;
            }

            spriteUsageFlags &= ~SpriteUsageFlags.UsedSmallerThanSpriteRect;
            spriteUsageFlags &= ~SpriteUsageFlags.UsedBiggerThanSpriteRect;

            Vector3 sizeDifference = new Vector3(maximumUsageSize.Value.x - SpriteSize.x,
                                                 maximumUsageSize.Value.y - SpriteSize.y, 0);

            float differenceMagnitude = sizeDifference.magnitude / SpriteSize.magnitude;

            if (Mathf.Abs(differenceMagnitude) > SpriteAuditorUtility.SpriteUsageSizeThreshold)
            {
                if (maximumUsageSize.Value.sqrMagnitude > SpriteSize.sqrMagnitude)
                {
                    if (SpriteAuditorUtility.CanTweakMaxSize(this))
                    {
                        spriteUsageFlags |= SpriteUsageFlags.UsedBiggerThanSpriteRect;
                    }
                }
                else
                {
                    if (SpriteAuditorUtility.CanTweakMaxSize(this))
                    {
                        spriteUsageFlags |= SpriteUsageFlags.UsedSmallerThanSpriteRect;
                    }
                }
            }
        }
        private void OnPlayModeChanged(PlayModeStateChange playMode)
        {
            switch (playMode)
            {
            case PlayModeStateChange.EnteredPlayMode:
            {
                StartRecording();
                break;
            }

            case PlayModeStateChange.ExitingPlayMode:
            {
                if (isRecording)
                {
                    StopRecording();
                    StoreDatabase();
                }

                break;
            }

            case PlayModeStateChange.EnteredEditMode:
                SpriteAuditorUtility.SetResultViewDirty();
                break;
            }
        }
 private void OnEnable()
 {
     EditorApplication.playModeStateChanged += OnPlayModeChanged;
     SpriteAuditorUtility.SetMemoryDataDirty();
     SpriteAuditorUtility.SetResultViewDirty();
     SpriteAuditorUtility.SetSizeCheckThreshold(spriteUsageSizeThreshold);
 }
Esempio n. 7
0
 public override void DrawFilterOptions()
 {
     EditorGUI.BeginChangeCheck();
     currentFilter = (Filter)EditorGUILayout.EnumFlagsField("Filter", currentFilter);
     if (EditorGUI.EndChangeCheck())
     {
         SpriteAuditorUtility.SetResultViewDirty();
     }
 }
Esempio n. 8
0
        public void UpdateSpriteData()
        {
            for (int i = 0; i < spritesData.Count; i++)
            {
                spritesData[i].CheckAtlasData();
            }

            SpriteAuditorUtility.ClearSpriteDataDirty();
            SpriteAuditorUtility.SetMemoryDataDirty();
        }
Esempio n. 9
0
        private SpriteData GetOrCreateSpriteData(Sprite sprite)
        {
            if (TryGetSpriteDataBySprite(sprite, out SpriteData spriteData))
            {
                return(spriteData);
            }

            spriteData = new SpriteData(sprite);
            spritesData.Add(spriteData);
            SpriteAuditorUtility.SetResultViewDirty();
            return(spriteData);
        }
Esempio n. 10
0
        private SpriteUseData GetOrCreateSpriteUsageData(GameObject instance, string usagePath)
        {
            int instanceID = instance.GetInstanceID();

            if (TryGetSpriteUsageData(instance, instanceID, usagePath, out SpriteUseData spriteUseData))
            {
                return(spriteUseData);
            }

            spriteUseData = new SpriteUseData(instance, instanceID, usagePath);
            usages.Add(spriteUseData);
            SpriteAuditorUtility.SetResultViewDirty();
            return(spriteUseData);
        }
Esempio n. 11
0
 private void ReportScene(Scene scene)
 {
     if (scene.buildIndex == -1 || string.IsNullOrEmpty(scene.path))
     {
         spriteUsageFlags |= SpriteUsageFlags.UsedOnDontDestroyOrUnknowScene;
     }
     else
     {
         if (scenesPath.Add(scene.path))
         {
             SpriteAuditorUtility.SetResultViewDirty();
         }
     }
 }
Esempio n. 12
0
        public void ReportPath(string usagePath, Scene targetScene)
        {
            string targetScenePath = targetScene.path;
            string storagePath     = $"{targetScenePath}{PATH_SEPARATOR}{usagePath}";

            if (paths.Count == 0)
            {
                firstPath = storagePath;
            }
            if (paths.Add(storagePath))
            {
                SpriteAuditorUtility.SetResultViewDirty();
            }
        }
        private void LoadOrCreateDatabase()
        {
            string storedJson = EditorPrefs.GetString(ATLAS_AUDITOR_STORAGE_KEY, string.Empty);

            cachedSpriteDatabase = new SpriteDatabase();

            if (!string.IsNullOrEmpty(storedJson))
            {
                JsonWrapper.FromJson(storedJson, ref cachedSpriteDatabase);
            }

            spriteFinder.SetResult(SpriteDatabase);
            SpriteAuditorUtility.ClearMemoryDataDirty();
        }
Esempio n. 14
0
#pragma warning restore 0618

        public static void CacheKnowAtlases()
        {
            atlasToAllSprites.Clear();
            tagToSpriteAtlas.Clear();

            if (UsingLegacySpritePacker)
            {
                CacheLegacySpriteAtlases();
            }
            else
            {
                CacheSpriteAtlases();
            }

            SpriteAuditorUtility.ClearAtlasCacheDirty();
        }
Esempio n. 15
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();
        }
Esempio n. 16
0
        public static void DrawFixSpriteSize(SpriteData spriteData)
        {
            if (!SpriteAuditorUtility.CanFixSpriteData(spriteData))
            {
                return;
            }

            GUIStyle button = new GUIStyle(EditorStyles.miniButton)
            {
                fixedWidth = 200
            };

            if (GUILayout.Button("Fix texture Size", button))
            {
                SpriteAuditorUtility.SetBestSizeForTexture(spriteData);
            }
        }
 private static void TryToFixSizeOfSelectedObjects()
 {
     foreach (Object selectedObject in SpriteAuditorUtility.SelectedObjects)
     {
         if (selectedObject is Sprite sprite)
         {
             if (SpriteAuditorWindow.GetWindowInstance().SpriteDatabase
                 .TryGetSpriteDataBySprite(sprite, out SpriteData spriteData))
             {
                 if (SpriteAuditorUtility.CanFixSpriteData(spriteData))
                 {
                     SpriteAuditorUtility.SetBestSizeForTexture(spriteData);
                 }
             }
         }
     }
 }
Esempio n. 18
0
        private static void AddObjectSelectionToggle <T>(T targetObject) where T : Object
        {
            EditorGUI.BeginChangeCheck();
            GUILayoutOption[] guiLayoutOptions =
            {
                GUILayout.ExpandWidth(false),
                GUILayout.Width(15)
            };

            bool isObjectsSelected =
                EditorGUILayout.Toggle(SpriteAuditorUtility.IsObjectSelected(targetObject), EditorStyles.toggle, guiLayoutOptions);

            if (EditorGUI.EndChangeCheck())
            {
                SpriteAuditorUtility.SetObjectSelected(targetObject, isObjectsSelected);
            }
        }
Esempio n. 19
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 void MoveSpritesToAtlas(SpriteAtlas newAtlas)
        {
            foreach (Object selectedObject in SpriteAuditorUtility.SelectedObjects)
            {
                if (selectedObject is Sprite targetSprite)
                {
                    TryToRemoveSpriteFromAnyAtlasReference(targetSprite);

                    if (newAtlas == null)
                    {
                        continue;
                    }

                    Debug.Log($"Added {targetSprite} to {newAtlas}");
                    newAtlas.Add(new[] { selectedObject });
                    EditorUtility.SetDirty(newAtlas);
                }
            }

            SpriteAuditorUtility.ClearSelection();
            SpriteAuditorUtility.SetAllDirty();
        }
        private void DrawResults()
        {
            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.ClearSelection();
                SpriteAuditorUtility.SetResultViewDirty();
            }

            EditorGUILayout.EndHorizontal();
            EditorGUILayout.BeginHorizontal("Box");

            ResultView.DrawFilterOptions();

            EditorGUILayout.EndHorizontal();
            EditorGUILayout.EndHorizontal();

            DrawSearch();
            SpriteAuditorBatchAction.DrawBatchActions();
            ResultView.DrawResults(SpriteDatabase);

            EditorGUILayout.EndVertical();
        }
        protected override void DrawResultsInternal(SpriteDatabase spriteDatabase)
        {
            for (int i = 0; i < filteredAtlas.Length; i++)
            {
                SpriteAtlas atlas = filteredAtlas[i];

                EditorGUILayout.BeginVertical("Box");

                if (SpriteAuditorGUIUtility.DrawObjectFoldout(atlas,
                                                              $"{VisualizationType.Atlas.ToString()}_{atlas.name}"))
                {
                    EditorGUI.indentLevel++;

                    if (atlasToUsedSprites[atlas].Length > 0)
                    {
                        if (SpriteAuditorGUIUtility.DrawStringFoldout(
                                $"Used Sprites [{atlasToUsedSprites[atlas].Length}] ",
                                $"{VisualizationType.Atlas.ToString()}_{atlas.name}_used_sprites"))
                        {
                            EditorGUI.indentLevel++;

                            for (int j = 0; j < atlasToUsedSprites[atlas].Length; j++)
                            {
                                SpriteData spriteData = atlasToUsedSprites[atlas][j];
                                DrawSpriteDataField(spriteData);
                            }

                            SpriteAuditorUtility.DrawDefaultSelectionOptions(atlasToNotUsedSprites[atlas]);

                            EditorGUI.indentLevel--;
                        }
                    }

                    if (atlasToNotUsedSprites[atlas].Length > 0)
                    {
                        if (SpriteAuditorGUIUtility.DrawStringFoldout(
                                $"Not Used Sprites [{atlasToNotUsedSprites[atlas].Length}] ",
                                $"{VisualizationType.Atlas.ToString()}_{atlas.name}_not_used_sprites"))
                        {
                            EditorGUI.indentLevel++;

                            for (int j = 0; j < atlasToNotUsedSprites[atlas].Length; j++)
                            {
                                Sprite sprite = atlasToNotUsedSprites[atlas][j];
                                if (sprite == null)
                                {
                                    continue;
                                }

                                SpriteAuditorGUIUtility.DrawObjectFoldout(sprite,
                                                                          $"{VisualizationType.Atlas.ToString()}_{atlas.name}_{sprite.name}", false, true);
                            }

                            SpriteAuditorUtility.DrawDefaultSelectionOptions(atlasToNotUsedSprites[atlas]);
                            EditorGUI.indentLevel--;
                        }
                    }

                    EditorGUI.indentLevel--;
                }

                EditorGUILayout.EndVertical();
            }
        }
        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();
        }
 private void ClearCache()
 {
     EditorPrefs.DeleteKey(ATLAS_AUDITOR_STORAGE_KEY);
     cachedSpriteDatabase = null;
     SpriteAuditorUtility.SetResultViewDirty();
 }
        protected override void DrawResultsInternal(SpriteDatabase spriteDatabase)
        {
            if (uniqueUsedScenes == null)
            {
                return;
            }

            for (int i = 0; i < uniqueUsedScenes.Length; i++)
            {
                SceneAsset sceneAsset = uniqueUsedScenes[i];

                EditorGUILayout.BeginVertical("Box");

                if (SpriteAuditorGUIUtility.DrawObjectFoldout(sceneAsset, sceneAsset.name))
                {
                    EditorGUI.indentLevel++;
                    if (sceneToSingleSprites[sceneAsset].Length > 0)
                    {
                        EditorGUILayout.BeginVertical("Box");

                        if (SpriteAuditorGUIUtility.DrawStringFoldout($"Sprites Without Atlas [{sceneToSingleSprites[sceneAsset].Length}] ", $"{sceneAsset.name}_SceneViewSpritesWithoutAtlas"))
                        {
                            EditorGUI.indentLevel++;
                            foreach (SpriteData spriteData in sceneToSingleSprites[sceneAsset])
                            {
                                DrawSpriteDataField(spriteData);
                            }

                            SpriteAuditorUtility.DrawDefaultSelectionOptions(sceneToSingleSprites[sceneAsset]
                                                                             .Select(spriteData => spriteData.Sprite).Cast <Object>().ToList());
                            EditorGUI.indentLevel--;
                        }
                        EditorGUILayout.EndVertical();
                    }

                    if (sceneToAtlasToUsedSprites.ContainsKey(sceneAsset))
                    {
                        foreach (var atlasToUSedSprites in sceneToAtlasToUsedSprites[sceneAsset])
                        {
                            EditorGUILayout.BeginVertical("Box");

                            {
                                if (SpriteAuditorGUIUtility.DrawObjectFoldout(atlasToUSedSprites.Key,
                                                                              $"{VisualizationType.Scene.ToString()}_{atlasToUSedSprites.Key}"))
                                {
                                    EditorGUI.indentLevel++;
                                    foreach (SpriteData spriteData in sceneToAtlasToUsedSprites[sceneAsset][
                                                 atlasToUSedSprites.Key])
                                    {
                                        DrawSpriteDataField(spriteData);
                                    }

                                    SpriteAuditorUtility.DrawDefaultSelectionOptions(
                                        sceneToAtlasToUsedSprites[sceneAsset][atlasToUSedSprites.Key]
                                        .Select(spriteData => spriteData.Sprite).Cast <Object>().ToList());
                                    EditorGUI.indentLevel--;
                                }
                            }
                            EditorGUILayout.EndVertical();
                        }
                    }

                    EditorGUI.indentLevel--;
                }
                EditorGUILayout.EndVertical();
            }
        }
 public static void ScriptsReloaded()
 {
     SpriteAuditorUtility.SetMemoryDataDirty();
     SpriteAuditorUtility.SetResultViewDirty();
 }