A game about forced loneliness, made by TACStudios
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}