public ButtonBindingEntry(string name, bool supportsMultipleBindings, ButtonBinding binding, DefaultButtonBindingAttribute defaults) { Name = name; SupportsMultipleBindings = supportsMultipleBindings; Binding = binding; Defaults = defaults; }
private void InitializeButtonBindingV2(object settings, PropertyInfo prop) { if (!(prop.GetValue(settings) is ButtonBinding binding)) { binding = new ButtonBinding(); DefaultButtonBindingAttribute defaults = prop.GetCustomAttribute <DefaultButtonBindingAttribute>(); if (defaults != null) { if (defaults.Button != 0) { binding.Binding.Add(defaults.Button); } if (defaults.Key != 0) { binding.Binding.Add(defaults.Key); } } prop.SetValue(settings, binding); } binding.Button = (patch_VirtualButton_InputV1) new VirtualButton(binding.Binding, Input.Gamepad, 0.08f, 0.2f); ((patch_VirtualButton_InputV2)(VirtualButton)binding.Button).AutoConsumeBuffer = true; }
private void InitializeButtonBindingV1(object settings, PropertyInfo prop) { if (!(prop.GetValue(settings) is ButtonBinding binding)) { binding = new ButtonBinding(); DefaultButtonBindingAttribute defaults = prop.GetCustomAttribute <DefaultButtonBindingAttribute>(); if (defaults != null) { if (defaults.Button != 0) { binding.Buttons.Add(defaults.Button); } if (defaults.Key != 0) { binding.Keys.Add(defaults.Key); } } prop.SetValue(settings, binding); } patch_VirtualButton_InputV1 vbutton = new patch_VirtualButton_InputV1(); foreach (Keys key in binding.Keys) { vbutton.Nodes.Add(new patch_VirtualButton_InputV1.KeyboardKey(key)); } foreach (Buttons button_ in binding.Buttons) { Buttons button = button_; if ((button & Buttons.LeftTrigger) == Buttons.LeftTrigger) { vbutton.Nodes.Add(new patch_VirtualButton_InputV1.PadLeftTrigger(Input.Gamepad, 0.25f)); button &= ~Buttons.LeftTrigger; } if ((button & Buttons.RightTrigger) == Buttons.RightTrigger) { vbutton.Nodes.Add(new patch_VirtualButton_InputV1.PadLeftTrigger(Input.Gamepad, 0.25f)); button &= ~Buttons.RightTrigger; } if (button != 0) { vbutton.Nodes.Add(new patch_VirtualButton_InputV1.PadButton(Input.Gamepad, button)); } } binding.Button = vbutton; }
public override void Reload(int index = -1) { if (Module == null) { return; } Clear(); Add(new Header(Dialog.Clean("BTN_CONFIG_TITLE"))); Add(new Info()); Bindings.Clear(); object settings = Module._Settings; // The default name prefix. string typeName = Module.SettingsType.Name.ToLowerInvariant(); if (typeName.EndsWith("settings")) { typeName = typeName.Substring(0, typeName.Length - 8); } string nameDefaultPrefix = $"modoptions_{typeName}_"; SettingInGameAttribute attribInGame; foreach (PropertyInfo prop in Module.SettingsType.GetProperties()) { if ((attribInGame = prop.GetCustomAttribute <SettingInGameAttribute>()) != null && attribInGame.InGame != (Engine.Scene is Level)) { continue; } if (prop.GetCustomAttribute <SettingIgnoreAttribute>() != null) { continue; } if (!prop.CanRead || !prop.CanWrite) { continue; } if (typeof(ButtonBinding).IsAssignableFrom(prop.PropertyType)) { if (!(prop.GetValue(settings) is ButtonBinding binding)) { continue; } int mapping = Bindings.Count; string name = prop.GetCustomAttribute <SettingNameAttribute>()?.Name ?? $"{nameDefaultPrefix}{prop.Name.ToLowerInvariant()}"; name = name.DialogCleanOrNull() ?? (prop.Name.ToLowerInvariant().StartsWith("button") ? prop.Name.Substring(6) : prop.Name).SpacedPascalCase(); DefaultButtonBindingAttribute defaults = prop.GetCustomAttribute <DefaultButtonBindingAttribute>(); Bindings.Add(new ButtonBindingEntry(name, binding, defaults)); AddButtonConfigLine(mapping, defaults != null && defaults.Button != 0 && defaults.ForceDefaultButton ? ForceDefaultButton(defaults.Button, binding.Buttons) : binding.Buttons); } } Add(new SubHeader("")); Add(new Button(Dialog.Clean("KEY_CONFIG_RESET")) { IncludeWidthInMeasurement = false, AlwaysCenter = true, OnPressed = () => { Settings.Instance.SetDefaultButtonControls(reset: true); Input.Initialize(); Reload(Selection); } }); if (index >= 0) { Selection = index; } }
public ButtonBindingEntry(string name, ButtonBinding binding, DefaultButtonBindingAttribute defaults) { Name = name; Binding = binding; Defaults = defaults; }
public ButtonBindingEntry(ButtonBinding binding, DefaultButtonBindingAttribute defaults) { Binding = binding; Defaults = defaults; }
public virtual void OnInputInitialize() { if (SettingsType == null) { return; } object settings = _Settings; if (settings == null) { return; } foreach (PropertyInfo prop in SettingsType.GetProperties()) { if (!prop.CanRead) { continue; } if (typeof(ButtonBinding).IsAssignableFrom(prop.PropertyType)) { if (!(prop.GetValue(settings) is ButtonBinding binding)) { binding = new ButtonBinding(); DefaultButtonBindingAttribute defaults = prop.GetCustomAttribute <DefaultButtonBindingAttribute>(); if (defaults != null) { if (defaults.Button != 0) { binding.Buttons.Add(defaults.Button); } if (defaults.Key != 0) { binding.Keys.Add(defaults.Key); } } prop.SetValue(settings, binding); } VirtualButton vbutton = new VirtualButton(); foreach (Keys key in binding.Keys) { vbutton.Nodes.Add(new VirtualButton.KeyboardKey(key)); } foreach (Buttons button_ in binding.Buttons) { Buttons button = button_; if ((button & Buttons.LeftTrigger) == Buttons.LeftTrigger) { vbutton.Nodes.Add(new VirtualButton.PadLeftTrigger(Input.Gamepad, 0.25f)); button &= ~Buttons.LeftTrigger; } if ((button & Buttons.RightTrigger) == Buttons.RightTrigger) { vbutton.Nodes.Add(new VirtualButton.PadLeftTrigger(Input.Gamepad, 0.25f)); button &= ~Buttons.RightTrigger; } if (button != 0) { vbutton.Nodes.Add(new VirtualButton.PadButton(Input.Gamepad, button)); } } binding.Button = vbutton; } else if (false) { // TODO: JoystickBindings } } }