//------------------------------------------------------------------------------ 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)); }
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 }); } } }
//------------------------------------------------------------------------------ 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)); } }
//------------------------------------------------------------------------------ protected static void SetEnumPref <TEnum> (PrefKey key, TEnum value) where TEnum : struct, TClass { EditorPrefs.SetString(PrefKeyToString(key), Enum.GetName(typeof(TEnum), value)); }
//------------------------------------------------------------------------------ protected static String PrefKeyToString(PrefKey key) { return(Enum.GetName(typeof(PrefKey), key)); }