| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 | 
							- using System;
 
- using UnityEditor;
 
- using UnityEngine;
 
- namespace EnhancedHierarchy {
 
-     /// <summary>
 
-     /// Generic preference item interface.
 
-     /// </summary>
 
-     public interface IPrefItem {
 
-         bool Drawing { get; }
 
-         object Value { get; set; }
 
-         GUIContent Label { get; }
 
-         //void DoGUI();
 
-         GUIEnabled GetEnabledScope();
 
-         GUIEnabled GetEnabledScope(bool enabled);
 
-         GUIFade GetFadeScope(bool enabled);
 
-     }
 
-     /// <summary>
 
-     /// Generic preference item.
 
-     /// </summary>
 
-     [Serializable]
 
-     public sealed class PrefItem<T> : IPrefItem {
 
-         [Serializable]
 
-         private struct Wrapper {
 
-             [SerializeField]
 
-             public T value;
 
-         }
 
-         private const string KEY_PREFIX = "EH.";
 
-         private string key;
 
-         private Wrapper wrapper;
 
-         private T defaultValue;
 
-         private readonly GUIFade fade;
 
-         public GUIContent Label { get; private set; }
 
-         public bool Drawing { get { return fade.Visible; } }
 
-         public T DefaultValue {
 
-             get { return defaultValue; }
 
-             set { SetDefaultValue(value); }
 
-         }
 
-         public T Value {
 
-             get { return wrapper.value; }
 
-             set { SetValue(value, false); }
 
-         }
 
-         private bool UsingDefaultValue { get { return !EditorPrefs.HasKey(key); } }
 
-         object IPrefItem.Value {
 
-             get { return Value; }
 
-             set { Value = (T)value; }
 
-         }
 
-         public PrefItem(string key, T defaultValue, string text = "", string tooltip = "") {
 
-             this.key = KEY_PREFIX + key;
 
-             this.defaultValue = defaultValue;
 
-             Label = new GUIContent(text, tooltip);
 
-             fade = new GUIFade();
 
-             Preferences.contents.Add(Label);
 
-             Preferences.onResetPreferences += ResetValue;
 
-             if (UsingDefaultValue)
 
-                 wrapper.value = Clone(defaultValue);
 
-             else
 
-                 LoadValue();
 
-         }
 
-         public void SetDefaultValue(T newDefault) {
 
-             if (UsingDefaultValue)
 
-                 wrapper.value = Clone(newDefault);
 
-             defaultValue = newDefault;
 
-         }
 
-         private void LoadValue() {
 
-             try {
 
-                 if (!EditorPrefs.HasKey(key))
 
-                     return;
 
-                 var json = EditorPrefs.GetString(key);
 
-                 // if(Preferences.DebugEnabled)
 
-                 //    Debug.LogFormat("Loading preference {0}: {1}", key, json);
 
-                 wrapper = JsonUtility.FromJson<Wrapper>(json);
 
-             } catch (Exception e) {
 
-                 Debug.LogWarningFormat("Failed to load preference item \"{0}\", using default value: {1}", key, defaultValue);
 
-                 Debug.LogException(e);
 
-                 ResetValue();
 
-             }
 
-         }
 
-         private void SetValue(T newValue, bool forceSave) {
 
-             try {
 
-                 if (Value != null && Value.Equals(newValue) && !forceSave)
 
-                     return;
 
-                 wrapper.value = newValue;
 
-                 var json = JsonUtility.ToJson(wrapper, Preferences.DebugEnabled);
 
-                 // if(Preferences.DebugEnabled)
 
-                 //    Debug.LogFormat("Saving preference {0}: {1}", key, json);
 
-                 EditorPrefs.SetString(key, json);
 
-             } catch (Exception e) {
 
-                 Debug.LogWarningFormat("Failed to save {0}: {1}", key, e);
 
-                 Debug.LogException(e);
 
-             } finally {
 
-                 wrapper.value = newValue;
 
-             }
 
-         }
 
-         private void ResetValue() {
 
-             if (UsingDefaultValue)
 
-                 return;
 
-             if (Preferences.DebugEnabled)
 
-                 Debug.LogFormat("Deleted preference {0}", key);
 
-             wrapper.value = Clone(defaultValue);
 
-             EditorPrefs.DeleteKey(key);
 
-         }
 
-         public void ForceSave() {
 
-             SetValue(wrapper.value, true);
 
-         }
 
-         private T Clone(T other) {
 
-             if (typeof(T).IsValueType)
 
-                 return other;
 
-             var wrapper = new Wrapper() { value = other };
 
-             var json = JsonUtility.ToJson(wrapper, Preferences.DebugEnabled);
 
-             var clonnedWrapper = JsonUtility.FromJson<Wrapper>(json);
 
-             // if(Preferences.DebugEnabled)
 
-             //     Debug.LogFormat("Clone of {0}: {1}", key, json);
 
-             return clonnedWrapper.value;
 
-         }
 
-         public GUIEnabled GetEnabledScope() {
 
-             return GetEnabledScope(Value.Equals(true));
 
-         }
 
-         public GUIEnabled GetEnabledScope(bool enabled) {
 
-             return new GUIEnabled(enabled);
 
-         }
 
-         public GUIFade GetFadeScope(bool enabled) {
 
-             fade.SetTarget(enabled);
 
-             return fade;
 
-         }
 
-         public static implicit operator T(PrefItem<T> pb) {
 
-             if (pb == null) {
 
-                 Debug.LogError("Cannot get the value of a null PrefItem");
 
-                 return default(T);
 
-             }
 
-             return pb.Value;
 
-         }
 
-         public static implicit operator GUIContent(PrefItem<T> pb) {
 
-             if (pb == null) {
 
-                 Debug.LogError("Cannot get the content of a null PrefItem");
 
-                 return new GUIContent("Null PrefItem");
 
-             }
 
-             return pb.Label;
 
-         }
 
-     }
 
- }
 
 
  |