OvertakingLegend/Assets/Plugins/vFolders/VFoldersCache.cs

118 lines
3.1 KiB
C#

#if UNITY_EDITOR
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using UnityEditor.ShortcutManagement;
using System.Reflection;
using System.Linq;
using UnityEngine.UIElements;
using UnityEngine.SceneManagement;
using UnityEditor.SceneManagement;
using static VFolders.Libs.VUtils;
using static VFolders.Libs.VGUI;
namespace VFolders
{
[FilePath("Library/vFolders Cache.asset", FilePathAttribute.Location.ProjectFolder)]
public class VFoldersCache : ScriptableSingleton<VFoldersCache>
{
public Texture2D GetIcon(int key)
{
if (instance.iconTextures_byKey.ContainsKey(key)) return instance.iconTextures_byKey[key];
if (instance.iconTextureDatas_byKey.ContainsKey(key)) return instance.iconTextures_byKey[key] = instance.iconTextureDatas_byKey[key].GetTexture();
return null;
}
public void AddIcon(int key, Texture2D icon)
{
instance.iconTextures_byKey[key] = icon;
instance.iconTextureDatas_byKey[key] = new TextureData(icon);
instance.Save(true);
}
public bool HasIcon(int key) => instance.iconTextureDatas_byKey.ContainsKey(key);
public Dictionary<int, Texture2D> iconTextures_byKey = new Dictionary<int, Texture2D>();
public SerializableDictionary<int, TextureData> iconTextureDatas_byKey = new SerializableDictionary<int, TextureData>();
[System.Serializable]
public class TextureData
{
public byte[] rawData;
public int width;
public int height;
public TextureFormat format;
public int mipCount;
public float pixelsPerPoint;
public TextureData(Texture2D t)
{
rawData = t.GetRawTextureData();
width = t.width;
height = t.height;
format = t.format;
mipCount = t.mipmapCount;
pixelsPerPoint = t.GetPropertyValue<float>("pixelsPerPoint");
}
public Texture2D GetTexture()
{
var t = new Texture2D(width, height, format, mipCount, false);
t.LoadRawTextureData(rawData);
t.SetPropertyValue("pixelsPerPoint", pixelsPerPoint);
t.hideFlags = HideFlags.DontSave;
t.Apply();
return t;
}
}
public SerializableDictionary<string, FolderState> folderStates_byGuid = new SerializableDictionary<string, FolderState>();
[System.Serializable]
public class FolderState
{
public bool isEmpty;
public List<string> contentMinimapIconNames = new List<string>();
public string autoIconName = "";
public bool needsUpdate;
}
public static void Clear()
{
instance.iconTextures_byKey.Clear();
instance.iconTextureDatas_byKey.Clear();
instance.folderStates_byGuid.Clear();
instance.Save(true);
}
}
}
#endif