コード例 #1
0
 public ButtonBindingEntry(string name, bool supportsMultipleBindings, ButtonBinding binding, DefaultButtonBindingAttribute defaults)
 {
     Name = name;
     SupportsMultipleBindings = supportsMultipleBindings;
     Binding  = binding;
     Defaults = defaults;
 }
コード例 #2
0
        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;
        }
コード例 #3
0
        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;
        }
コード例 #4
0
        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;
            }
        }
コード例 #5
0
 public ButtonBindingEntry(string name, ButtonBinding binding, DefaultButtonBindingAttribute defaults)
 {
     Name     = name;
     Binding  = binding;
     Defaults = defaults;
 }
コード例 #6
0
 public ButtonBindingEntry(ButtonBinding binding, DefaultButtonBindingAttribute defaults)
 {
     Binding  = binding;
     Defaults = defaults;
 }
コード例 #7
0
ファイル: EverestModule.cs プロジェクト: jakobrs/Everest
        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
                }
            }
        }