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(); }
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); }
public override void DrawFilterOptions() { EditorGUI.BeginChangeCheck(); currentFilter = (Filter)EditorGUILayout.EnumFlagsField("Filter", currentFilter); if (EditorGUI.EndChangeCheck()) { SpriteAuditorUtility.SetResultViewDirty(); } }
public void UpdateSpriteData() { for (int i = 0; i < spritesData.Count; i++) { spritesData[i].CheckAtlasData(); } SpriteAuditorUtility.ClearSpriteDataDirty(); SpriteAuditorUtility.SetMemoryDataDirty(); }
private SpriteData GetOrCreateSpriteData(Sprite sprite) { if (TryGetSpriteDataBySprite(sprite, out SpriteData spriteData)) { return(spriteData); } spriteData = new SpriteData(sprite); spritesData.Add(spriteData); SpriteAuditorUtility.SetResultViewDirty(); return(spriteData); }
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); }
private void ReportScene(Scene scene) { if (scene.buildIndex == -1 || string.IsNullOrEmpty(scene.path)) { spriteUsageFlags |= SpriteUsageFlags.UsedOnDontDestroyOrUnknowScene; } else { if (scenesPath.Add(scene.path)) { SpriteAuditorUtility.SetResultViewDirty(); } } }
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(); }
#pragma warning restore 0618 public static void CacheKnowAtlases() { atlasToAllSprites.Clear(); tagToSpriteAtlas.Clear(); if (UsingLegacySpritePacker) { CacheLegacySpriteAtlases(); } else { CacheSpriteAtlases(); } SpriteAuditorUtility.ClearAtlasCacheDirty(); }
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(); }
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); } } } } }
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); } }
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(); }