A game about forced loneliness, made by TACStudios
at master 84 lines 2.6 kB view raw
1using System; 2using System.Collections.Generic; 3using UnityEngine; 4 5namespace UnityEditor.Tilemaps 6{ 7 internal class GridPalettes : ScriptableSingleton<GridPalettes> 8 { 9 private List<GameObject> m_PalettesCache; 10 11 internal static Action palettesChanged; 12 13 internal static List<GameObject> palettes 14 { 15 get 16 { 17 if (instance.m_PalettesCache == null 18 || (instance.m_PalettesCache.Count > 0 && instance.m_PalettesCache[0] == null)) 19 { 20 instance.RefreshPalettesCache(); 21 } 22 return instance.m_PalettesCache; 23 } 24 } 25 26 private void OnEnable() 27 { 28 CleanCache(); 29 } 30 31 private void OnDisable() 32 { 33 CleanCache(); 34 } 35 36 private void RefreshPalettesCache() 37 { 38 if (m_PalettesCache == null) 39 m_PalettesCache = new List<GameObject>(); 40 m_PalettesCache.Clear(); 41 42 string[] guids = AssetDatabase.FindAssets("t:GridPalette"); 43 foreach (string guid in guids) 44 { 45 string path = AssetDatabase.GUIDToAssetPath(guid); 46 GridPalette paletteAsset = AssetDatabase.LoadAssetAtPath(path, typeof(GridPalette)) as GridPalette; 47 if (paletteAsset != null) 48 { 49 string assetPath = AssetDatabase.GetAssetPath(paletteAsset); 50 GameObject palette = AssetDatabase.LoadMainAssetAtPath(assetPath) as GameObject; 51 if (palette != null) 52 { 53 m_PalettesCache.Add(palette); 54 } 55 } 56 } 57 m_PalettesCache.Sort((x, y) => String.Compare(x.name, y.name, StringComparison.OrdinalIgnoreCase)); 58 59 palettesChanged?.Invoke(); 60 } 61 62 private class AssetProcessor : AssetPostprocessor 63 { 64 public override int GetPostprocessOrder() 65 { 66 return 1; 67 } 68 69 private static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromPath) 70 { 71 if (!GridPaintingState.savingPalette) 72 { 73 CleanCache(); 74 palettesChanged?.Invoke(); 75 } 76 } 77 } 78 79 internal static void CleanCache() 80 { 81 instance.m_PalettesCache = null; 82 } 83 } 84}