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.
142 lines
4.7 KiB
C#
142 lines
4.7 KiB
C#
namespace UnityEditor.SettingsManagement
|
|
{
|
|
/// <summary>
|
|
/// A settings repository backed by the UnityEditor.EditorPrefs class.
|
|
/// </summary>
|
|
public class UserSettingsRepository : ISettingsRepository
|
|
{
|
|
static string GetEditorPrefKey<T>(string key)
|
|
{
|
|
return GetEditorPrefKey(typeof(T).FullName, key);
|
|
}
|
|
|
|
static string GetEditorPrefKey(string fullName, string key)
|
|
{
|
|
return fullName + "::" + key;
|
|
}
|
|
|
|
static void SetEditorPref<T>(string key, T value)
|
|
{
|
|
var k = GetEditorPrefKey<T>(key);
|
|
|
|
if (typeof(T) == typeof(string))
|
|
EditorPrefs.SetString(k, (string)(object)value);
|
|
else if (typeof(T) == typeof(bool))
|
|
EditorPrefs.SetBool(k, (bool)(object)value);
|
|
else if (typeof(T) == typeof(float))
|
|
EditorPrefs.SetFloat(k, (float)(object)value);
|
|
else if (typeof(T) == typeof(int))
|
|
EditorPrefs.SetInt(k, (int)(object)value);
|
|
else
|
|
EditorPrefs.SetString(k, ValueWrapper<T>.Serialize(value));
|
|
}
|
|
|
|
static T GetEditorPref<T>(string key, T fallback = default(T))
|
|
{
|
|
var k = GetEditorPrefKey<T>(key);
|
|
|
|
if (!EditorPrefs.HasKey(k))
|
|
return fallback;
|
|
|
|
var o = (object)fallback;
|
|
|
|
if (typeof(T) == typeof(string))
|
|
o = EditorPrefs.GetString(k, (string)o);
|
|
else if (typeof(T) == typeof(bool))
|
|
o = EditorPrefs.GetBool(k, (bool)o);
|
|
else if (typeof(T) == typeof(float))
|
|
o = EditorPrefs.GetFloat(k, (float)o);
|
|
else if (typeof(T) == typeof(int))
|
|
o = EditorPrefs.GetInt(k, (int)o);
|
|
else
|
|
return ValueWrapper<T>.Deserialize(EditorPrefs.GetString(k));
|
|
|
|
return (T)o;
|
|
}
|
|
|
|
/// <value>
|
|
/// What SettingsScope this repository applies to.
|
|
/// </value>
|
|
/// <inheritdoc cref="ISettingsRepository.scope"/>
|
|
public SettingsScope scope
|
|
{
|
|
get { return SettingsScope.User; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// An identifying name for this repository. User settings are named "EditorPrefs."
|
|
/// </summary>
|
|
public string name
|
|
{
|
|
get { return "EditorPrefs"; }
|
|
}
|
|
|
|
/// <value>
|
|
/// File path to the serialized settings data.
|
|
/// </value>
|
|
/// <remarks>
|
|
/// This property returns an empty string.
|
|
/// </remarks>
|
|
/// <inheritdoc cref="ISettingsRepository.path"/>
|
|
public string path
|
|
{
|
|
get { return string.Empty; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Save all settings to their serialized state.
|
|
/// </summary>
|
|
/// <inheritdoc cref="ISettingsRepository.Save"/>
|
|
public void Save()
|
|
{
|
|
}
|
|
|
|
/// <inheritdoc />
|
|
/// <summary>
|
|
/// Set a value for key of type T.
|
|
/// </summary>
|
|
/// <param name="key">The settings key.</param>
|
|
/// <param name="value">The value to set. Must be serializable.</param>
|
|
/// <typeparam name="T">Type of value.</typeparam>
|
|
public void Set<T>(string key, T value)
|
|
{
|
|
SetEditorPref<T>(key, value);
|
|
}
|
|
|
|
/// <inheritdoc />
|
|
/// <summary>
|
|
/// Get a value with key of type T, or return the fallback value if no matching key is found.
|
|
/// </summary>
|
|
/// <param name="key">The settings key.</param>
|
|
/// <param name="fallback">If no key with a value of type T is found, this value is returned.</param>
|
|
/// <typeparam name="T">Type of value to search for.</typeparam>
|
|
public T Get<T>(string key, T fallback = default(T))
|
|
{
|
|
return GetEditorPref<T>(key, fallback);
|
|
}
|
|
|
|
/// <inheritdoc />
|
|
/// <summary>
|
|
/// Does the repository contain a setting with key and type.
|
|
/// </summary>
|
|
/// <param name="key">The settings key.</param>
|
|
/// <typeparam name="T">The type of value to search for.</typeparam>
|
|
/// <returns>True if a setting matching both key and type is found, false if no entry is found.</returns>
|
|
public bool ContainsKey<T>(string key)
|
|
{
|
|
return EditorPrefs.HasKey(GetEditorPrefKey<T>(key));
|
|
}
|
|
|
|
/// <inheritdoc />
|
|
/// <summary>
|
|
/// Remove a key value pair from the settings repository.
|
|
/// </summary>
|
|
/// <param name="key"></param>
|
|
/// <typeparam name="T"></typeparam>
|
|
public void Remove<T>(string key)
|
|
{
|
|
EditorPrefs.DeleteKey(GetEditorPrefKey<T>(key));
|
|
}
|
|
}
|
|
}
|