test
This commit is contained in:
@@ -0,0 +1,141 @@
|
||||
namespace UnityEditor.SettingsManagement
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents a settings repository for user preferences.
|
||||
/// </summary>
|
||||
/// <seealso cref="UnityEditor.EditorPrefs"/>
|
||||
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;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the <see cref="UnityEditor.SettingsScope">scope</see> this repository applies to.
|
||||
/// </summary>
|
||||
/// <value>Indicates that this is a <see cref="UnityEditor.SettingsScope.User"/> preference.</value>
|
||||
/// <seealso cref="ISettingsRepository.scope"/>
|
||||
public SettingsScope scope
|
||||
{
|
||||
get { return SettingsScope.User; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the identifying name for this repository.
|
||||
/// </summary>
|
||||
/// <value>User settings are named "EditorPrefs".</value>
|
||||
public string name
|
||||
{
|
||||
get { return "EditorPrefs"; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the full path to the file containing the serialized settings data.
|
||||
/// </summary>
|
||||
/// <remarks>This property returns an empty string.</remarks>
|
||||
/// <value>The location stored for this repository.</value>
|
||||
/// <seealso cref="ISettingsRepository.path"/>
|
||||
public string path
|
||||
{
|
||||
get { return string.Empty; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Saves all settings to their serialized state.
|
||||
/// </summary>
|
||||
/// <seealso cref="ISettingsRepository.Save"/>
|
||||
public void Save()
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sets a value for a settings entry with a matching key and type `T`.
|
||||
/// </summary>
|
||||
/// <param name="key">The key used to identify the settings entry.</param>
|
||||
/// <param name="value">The value to set. This must be serializable.</param>
|
||||
/// <typeparam name="T">The type of value that this key points to.</typeparam>
|
||||
public void Set<T>(string key, T value)
|
||||
{
|
||||
SetEditorPref<T>(key, value);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns a value for a settings entry with a matching key and type `T`.
|
||||
/// </summary>
|
||||
/// <param name="key">The key used to identify the settings entry.</param>
|
||||
/// <param name="fallback">Specify the value of type `T` to return if the entry can't be found.</param>
|
||||
/// <typeparam name="T">The type of value that this key points to.</typeparam>
|
||||
/// <returns>The value matching both `key` and type `T`. If there was no match, this returns the `fallback` value.</returns>
|
||||
public T Get<T>(string key, T fallback = default(T))
|
||||
{
|
||||
return GetEditorPref<T>(key, fallback);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Determines whether this repository contains a settings entry that matches the specified key and is of type `T`.
|
||||
/// </summary>
|
||||
/// <param name="key">The key used to identify the settings entry.</param>
|
||||
/// <typeparam name="T">The type of value that this key points to.</typeparam>
|
||||
/// <returns>True if a settings entry matches both `key` and type `T`; false if no entry is found.</returns>
|
||||
public bool ContainsKey<T>(string key)
|
||||
{
|
||||
return EditorPrefs.HasKey(GetEditorPrefKey<T>(key));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Removes a key-value pair from this settings repository. This method identifies the settings entry to remove
|
||||
/// by matching the specified key for a value of type `T`.
|
||||
/// </summary>
|
||||
/// <param name="key">The key used to identify the settings entry.</param>
|
||||
/// <typeparam name="T">The type of value that this key points to.</typeparam>
|
||||
public void Remove<T>(string key)
|
||||
{
|
||||
EditorPrefs.DeleteKey(GetEditorPrefKey<T>(key));
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user