示例#1
0
            //------------------------------------------------------------------------------
            protected static TEnum GetEnumPref <TEnum> (PrefKey key, TEnum defaultValue) where TEnum : struct, TClass
            {
                ValidateEnumPref(key, defaultValue);

                String prefValueString = EditorPrefs.GetString(PrefKeyToString(key));

                return((TEnum)Enum.Parse(typeof(TEnum), prefValueString));
            }
        internal static ShortcutEntry CreateFromAttribute(MethodInfo methodInfo, ShortcutAttribute attribute)
        {
            var keyEvent           = Event.KeyboardEvent(attribute.defaultKeyCombination);
            var defaultCombination = new List <KeyCombination>();
            var keyCombination     = new KeyCombination(keyEvent);

            defaultCombination.Add(keyCombination);
            var identifier   = new Identifier(methodInfo, attribute);
            var type         = attribute is ClutchShortcutAttribute ? ShortcutType.Clutch : ShortcutType.Action;
            var methodParams = methodInfo.GetParameters();
            Action <ShortcutArguments> action;

            if (methodParams.Length == 0)
            {
                action = shortcutArgs =>
                {
                    methodInfo.Invoke(null, k_EmptyReusableShortcutArgs);
                };
            }
            else
            {
                action = shortcutArgs =>
                {
                    k_ReusableShortcutArgs[0] = shortcutArgs;
                    methodInfo.Invoke(null, k_ReusableShortcutArgs);
                };
            }

            KeyCombination?prefKeyMigratedValue = null;
            var            prefKeyAttr          = methodInfo.GetCustomAttributes(
                typeof(FormerlyPrefKeyAsAttribute), false
                ).FirstOrDefault() as FormerlyPrefKeyAsAttribute;

            if (prefKeyAttr != null)
            {
                var    prefKeyDefaultValue = new KeyCombination(Event.KeyboardEvent(prefKeyAttr.defaultValue));
                string name;
                Event  keyboardEvent;
                if (
                    PrefKey.TryParseUniquePrefString(EditorPrefs.GetString(prefKeyAttr.name, prefKeyAttr.defaultValue), out name, out keyboardEvent)
                    )
                {
                    var prefKeyCurrentValue = new KeyCombination(keyboardEvent);
                    if (!prefKeyCurrentValue.Equals(prefKeyDefaultValue))
                    {
                        prefKeyMigratedValue = prefKeyCurrentValue;
                    }
                }
            }

            return(new ShortcutEntry(identifier, defaultCombination, action, attribute.context, type, prefKeyMigratedValue));
        }
示例#3
0
    public void Load()
    {
        if (m_Loaded)
        {
            return;
        }

        m_Loaded = true;
        m_event  = Event.KeyboardEvent(m_Shortcut);
        PrefKey prefKey = Settings.Get(m_name, this);

        m_name  = prefKey.Name;
        m_event = prefKey.KeyboardEvent;
    }
        internal static void MigrateUserSpecifiedPrefKeys(
            IEnumerable <MethodInfo> methodsWithFormerlyPrefKeyAs, List <ShortcutEntry> entries
            )
        {
            foreach (var method in methodsWithFormerlyPrefKeyAs)
            {
                var shortcutAttr =
                    Attribute.GetCustomAttribute(method, typeof(ShortcutAttribute), true) as ShortcutAttribute;
                if (shortcutAttr == null)
                {
                    continue;
                }

                var entry = entries.Find(e => string.Equals(e.identifier.path, shortcutAttr.identifier));
                // ignore former PrefKeys if the shortcut profile has already loaded and applied an override
                if (entry == null || entry.overridden)
                {
                    continue;
                }

                var prefKeyAttr =
                    (FormerlyPrefKeyAsAttribute)Attribute.GetCustomAttribute(method, typeof(FormerlyPrefKeyAsAttribute));
                var    prefKeyDefaultValue = $"{prefKeyAttr.name};{prefKeyAttr.defaultValue}";
                string name;
                Event  keyboardEvent;
                string shortcut;
                if (!PrefKey.TryParseUniquePrefString(prefKeyDefaultValue, out name, out keyboardEvent, out shortcut))
                {
                    continue;
                }
                var prefKeyDefaultKeyCombination = KeyCombination.FromPrefKeyKeyboardEvent(keyboardEvent);

                // Parse current pref key value (falling back on default pref key value)
                if (!PrefKey.TryParseUniquePrefString(EditorPrefs.GetString(prefKeyAttr.name, prefKeyDefaultValue), out name, out keyboardEvent, out shortcut))
                {
                    continue;
                }
                var prefKeyCurrentKeyCombination = KeyCombination.FromPrefKeyKeyboardEvent(keyboardEvent);

                // only migrate pref keys that the user actually overwrote
                if (!prefKeyCurrentKeyCombination.Equals(prefKeyDefaultKeyCombination))
                {
                    entry.SetOverride(new List <KeyCombination> {
                        prefKeyCurrentKeyCombination
                    });
                }
            }
        }
示例#5
0
            //------------------------------------------------------------------------------
            protected static void ValidateEnumPref <TEnum> (PrefKey key, TEnum defaultValue) where TEnum : struct, TClass
            {
                String prefKeyString = PrefKeyToString(key);

                // Nuke any existing value that doesn't exist in our enumeration
                if (EditorPrefs.HasKey(prefKeyString) && !Enum.IsDefined(typeof(TEnum), EditorPrefs.GetString(prefKeyString)))
                {
                    EditorPrefs.DeleteKey(prefKeyString);
                }

                // Set up an initial value if the pref doesn't exist
                if (!EditorPrefs.HasKey(prefKeyString))
                {
                    EditorPrefs.SetString(prefKeyString, Enum.GetName(typeof(TEnum), defaultValue));
                }
            }
示例#6
0
 //------------------------------------------------------------------------------
 protected static void SetEnumPref <TEnum> (PrefKey key, TEnum value) where TEnum : struct, TClass
 {
     EditorPrefs.SetString(PrefKeyToString(key), Enum.GetName(typeof(TEnum), value));
 }
示例#7
0
 //------------------------------------------------------------------------------
 protected static String PrefKeyToString(PrefKey key)
 {
     return(Enum.GetName(typeof(PrefKey), key));
 }