You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
280 lines
7.6 KiB
C#
280 lines
7.6 KiB
C#
#if UNITY_EDITOR
|
|
|
|
using UnityEngine;
|
|
using System.Linq;
|
|
using System.Collections.Generic;
|
|
using UnityEngine.Polybrush;
|
|
|
|
namespace UnityEditor.Polybrush
|
|
{
|
|
/// <summary>
|
|
/// Store Polybrush settings in a project-local manner.
|
|
/// </summary>
|
|
internal class PreferenceDictionary : ScriptableObject, ISerializationCallbackReceiver, IHasDefault, ICustomSettings
|
|
{
|
|
Dictionary<string, bool> m_bool = new Dictionary<string, bool>();
|
|
Dictionary<string, int> m_int = new Dictionary<string, int>();
|
|
Dictionary<string, float> m_float = new Dictionary<string, float>();
|
|
Dictionary<string, string> m_string = new Dictionary<string, string>();
|
|
Dictionary<string, Color> m_Color = new Dictionary<string, Color>();
|
|
|
|
[SerializeField] List<string> m_bool_keys;
|
|
[SerializeField] List<string> m_int_keys;
|
|
[SerializeField] List<string> m_float_keys;
|
|
[SerializeField] List<string> m_string_keys;
|
|
[SerializeField] List<string> m_Color_keys;
|
|
|
|
[SerializeField] List<bool> m_bool_values;
|
|
[SerializeField] List<int> m_int_values;
|
|
[SerializeField] List<float> m_float_values;
|
|
[SerializeField] List<string> m_string_values;
|
|
[SerializeField] List<Color> m_Color_values;
|
|
|
|
public string assetsFolder { get { return ""; } }
|
|
|
|
/// <summary>
|
|
/// Perform the ritual "Please Serialize My Dictionary" dance.
|
|
/// </summary>
|
|
public void OnBeforeSerialize()
|
|
{
|
|
m_bool_keys = m_bool.Keys.ToList();
|
|
m_int_keys = m_int.Keys.ToList();
|
|
m_float_keys = m_float.Keys.ToList();
|
|
m_string_keys = m_string.Keys.ToList();
|
|
m_Color_keys = m_Color.Keys.ToList();
|
|
|
|
m_bool_values = m_bool.Values.ToList();
|
|
m_int_values = m_int.Values.ToList();
|
|
m_float_values = m_float.Values.ToList();
|
|
m_string_values = m_string.Values.ToList();
|
|
m_Color_values = m_Color.Values.ToList();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Reconstruct preference dictionaries from serialized lists.
|
|
/// </summary>
|
|
public void OnAfterDeserialize()
|
|
{
|
|
for(int i = 0; i < m_bool_keys.Count; i++)
|
|
m_bool.Add(m_bool_keys[i], m_bool_values[i]);
|
|
|
|
for(int i = 0; i < m_int_keys.Count; i++)
|
|
m_int.Add(m_int_keys[i], m_int_values[i]);
|
|
|
|
for(int i = 0; i < m_float_keys.Count; i++)
|
|
m_float.Add(m_float_keys[i], m_float_values[i]);
|
|
|
|
for(int i = 0; i < m_string_keys.Count; i++)
|
|
m_string.Add(m_string_keys[i], m_string_values[i]);
|
|
|
|
for(int i = 0; i < m_Color_keys.Count; i++)
|
|
m_Color.Add(m_Color_keys[i], m_Color_values[i]);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Clear dictionary values.
|
|
/// </summary>
|
|
public void SetDefaultValues()
|
|
{
|
|
m_bool.Clear();
|
|
m_int.Clear();
|
|
m_float.Clear();
|
|
m_string.Clear();
|
|
m_Color.Clear();
|
|
|
|
EditorUtility.SetDirty(this);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Check if a key is contained within any type dictionary.
|
|
/// </summary>
|
|
/// <param name="key"></param>
|
|
/// <returns></returns>
|
|
internal bool HasKey(string key)
|
|
{
|
|
return m_bool.ContainsKey(key) ||
|
|
m_int.ContainsKey(key) ||
|
|
m_float.ContainsKey(key) ||
|
|
m_string.ContainsKey(key) ||
|
|
m_Color.ContainsKey(key);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Fetch a value from the stored preferences. If key is not found, a default value is returned.
|
|
/// </summary>
|
|
/// <param name="key"></param>
|
|
/// <param name="fallback"></param>
|
|
/// <returns></returns>
|
|
internal bool GetBool(string key, bool fallback = default(bool))
|
|
{
|
|
bool value;
|
|
if(m_bool.TryGetValue(key, out value))
|
|
return value;
|
|
return fallback;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Fetch a value from the stored preferences. If key is not found, a default value is returned.
|
|
/// </summary>
|
|
/// <param name="key"></param>
|
|
/// <param name="fallback"></param>
|
|
/// <returns></returns>
|
|
internal int GetInt(string key, int fallback = default(int))
|
|
{
|
|
int value;
|
|
if(m_int.TryGetValue(key, out value))
|
|
return value;
|
|
return fallback;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Fetch a value from the stored preferences. If key is not found, a default value is returned.
|
|
/// </summary>
|
|
/// <param name="key"></param>
|
|
/// <param name="fallback"></param>
|
|
/// <returns></returns>
|
|
internal float GetFloat(string key, float fallback = default(float))
|
|
{
|
|
float value;
|
|
if(m_float.TryGetValue(key, out value))
|
|
return value;
|
|
return fallback;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Fetch a value from the stored preferences. If key is not found, a default value is returned.
|
|
/// </summary>
|
|
/// <param name="key"></param>
|
|
/// <param name="fallback"></param>
|
|
/// <returns></returns>
|
|
internal string GetString(string key, string fallback = default(string))
|
|
{
|
|
string value;
|
|
if(m_string.TryGetValue(key, out value))
|
|
return value;
|
|
return fallback;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Fetch a value from the stored preferences. If key is not found, a default value is returned.
|
|
/// </summary>
|
|
/// <param name="key"></param>
|
|
/// <param name="fallback"></param>
|
|
/// <returns></returns>
|
|
internal Color GetColor(string key, Color fallback = default(Color))
|
|
{
|
|
Color value;
|
|
if(m_Color.TryGetValue(key, out value))
|
|
return value;
|
|
return fallback;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Set a value for key in the saved prefs.
|
|
/// </summary>
|
|
/// <param name="key"></param>
|
|
/// <param name="value"></param>
|
|
internal void SetBool(string key, bool value)
|
|
{
|
|
if(m_bool.ContainsKey(key))
|
|
m_bool[key] = value;
|
|
else
|
|
m_bool.Add(key, value);
|
|
|
|
EditorUtility.SetDirty(this);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Set a value for key in the saved prefs.
|
|
/// </summary>
|
|
/// <param name="key"></param>
|
|
/// <param name="value"></param>
|
|
internal void SetInt(string key, int value)
|
|
{
|
|
if(m_int.ContainsKey(key))
|
|
m_int[key] = value;
|
|
else
|
|
m_int.Add(key, value);
|
|
|
|
EditorUtility.SetDirty(this);
|
|
}
|
|
|
|
/**
|
|
* Set a value for key in the saved prefs.
|
|
*/
|
|
internal void SetFloat(string key, float value)
|
|
{
|
|
if(m_float.ContainsKey(key))
|
|
m_float[key] = value;
|
|
else
|
|
m_float.Add(key, value);
|
|
|
|
EditorUtility.SetDirty(this);
|
|
}
|
|
|
|
/**
|
|
* Set a value for key in the saved prefs.
|
|
*/
|
|
internal void SetString(string key, string value)
|
|
{
|
|
if(m_string.ContainsKey(key))
|
|
m_string[key] = value;
|
|
else
|
|
m_string.Add(key, value);
|
|
|
|
EditorUtility.SetDirty(this);
|
|
}
|
|
|
|
/**
|
|
* Set a value for key in the saved prefs.
|
|
*/
|
|
internal void SetColor(string key, Color value)
|
|
{
|
|
if(m_Color.ContainsKey(key))
|
|
m_Color[key] = value;
|
|
else
|
|
m_Color.Add(key, value);
|
|
|
|
EditorUtility.SetDirty(this);
|
|
}
|
|
/// <summary>
|
|
/// Removes key and its corresponding value from the preferences.
|
|
/// </summary>
|
|
/// <param name="key">Key to delete</param>
|
|
internal void DeleteKey(string key)
|
|
{
|
|
if(m_bool.ContainsKey(key))
|
|
{
|
|
m_bool.Remove(key);
|
|
return;
|
|
}
|
|
|
|
if (m_int.ContainsKey(key))
|
|
{
|
|
m_int.Remove(key);
|
|
return;
|
|
}
|
|
|
|
if (m_float.ContainsKey(key))
|
|
{
|
|
m_float.Remove(key);
|
|
return;
|
|
}
|
|
|
|
if (m_string.ContainsKey(key))
|
|
{
|
|
m_string.Remove(key);
|
|
return;
|
|
}
|
|
|
|
if (m_Color.ContainsKey(key))
|
|
{
|
|
m_Color.Remove(key);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
#endif
|