Exemple #1
0
 private static void InitBinding(ButtonBinding binding, params Keys[] defaultKeys)
 {
     if (binding.Keys.Count == 0)
     {
         binding.Keys = defaultKeys.ToList();
     }
 }
Exemple #2
0
        public IBuildable ExecuteOnPerformed(Action action)
        {
            var b = new ButtonBinding(currAction, action);

            bindings.Add(b);
            return(this);
        }
        //
        // Update bindings and comboboxes
        //
        private void UpdateBindings()
        {
            // Mouse
            comboBoxMouse.Items.Clear();
            foreach (DictionaryEntry entry in mouseBindings)
            {
                ButtonBinding binding = (ButtonBinding)entry.Value;
                binding.Key = (string)entry.Key;
                if (binding.Visible)
                {
                    comboBoxMouse.Items.Add(binding);
                }
            }

            // Multimedia
            comboBoxMultimedia.Items.Clear();
            foreach (DictionaryEntry entry in multimediaBindings)
            {
                ButtonBinding binding = (ButtonBinding)entry.Value;
                binding.Key = (string)entry.Key;
                if (binding.Visible)
                {
                    comboBoxMultimedia.Items.Add(binding);
                }
            }
        }
        //
        // Check key value
        //
        public void CheckKeyValue()
        {
            string keys = button.Content.ToString().ToUpper().Trim();

            comboBoxMouse.SelectedIndex      = 0;
            comboBoxMultimedia.SelectedIndex = 0;

            // Mouse
            if (mouseBindings.Contains(keys))
            {
                foreach (var item in comboBoxMouse.Items)
                {
                    ButtonBinding binding = (ButtonBinding)item;
                    if (binding.Key == keys)
                    {
                        comboBoxMouse.SelectedItem = item;
                        comboBoxMouse.Focus();
                    }
                }
            }

            // Multimedia
            else if (multimediaBindings.Contains(keys))
            {
                comboBoxMultimedia.SelectedIndex = 0;
                foreach (ButtonBinding item in comboBoxMultimedia.Items)
                {
                    //ButtonBinding binding = (ButtonBinding)item;
                    if (item.Key == keys)
                    {
                        comboBoxMultimedia.SelectedItem = item;
                        comboBoxMultimedia.Focus();
                    }
                }
            }

            // Launch application
            else if (keys.StartsWith(applicationCommand))
            {
                textApplication.Text = keys.Remove(0, applicationCommand.Length);
            }

            // Keyboard
            else
            {
                textKeyboard.Focus();
                textKeyboard.Text = keys;
            }

            textCustom.Text = keys;
        }
 //
 // Multimedia key changed
 //
 private void ComboBoxMultimedia_SelectionChanged(object sender, SelectionChangedEventArgs e)
 {
     if (!IsLoaded)
     {
         return;
     }
     if (comboBoxMultimedia.SelectedIndex >= 0 && comboBoxMultimedia.SelectedItem is ButtonBinding)
     {
         ButtonBinding binding = (ButtonBinding)comboBoxMultimedia.SelectedItem;
         if (comboBoxMultimedia.SelectedIndex > 0)
         {
             comboBoxMouse.SelectedIndex = 0;
         }
         textKeyboard.Text = binding.Key;
         textCustom.Text   = binding.Key;
     }
 }
        //
        // Check key value
        //
        public void CheckKeyValue()
        {
            string keys = button.Content.ToString().ToUpper().Trim();

            comboBoxMouse.SelectedIndex      = 0;
            comboBoxMultimedia.SelectedIndex = 0;

            // Mouse
            if (mouseBindings.Contains(keys))
            {
                foreach (var item in comboBoxMouse.Items)
                {
                    ButtonBinding binding = (ButtonBinding)item;
                    if (binding.Key == keys)
                    {
                        comboBoxMouse.SelectedItem = item;
                        comboBoxMouse.Focus();
                    }
                }
            }

            // Multimedia
            else if (multimediaBindings.Contains(keys))
            {
                comboBoxMultimedia.SelectedIndex = 0;
                foreach (ButtonBinding item in comboBoxMultimedia.Items)
                {
                    //ButtonBinding binding = (ButtonBinding)item;
                    if (item.Key == keys)
                    {
                        comboBoxMultimedia.SelectedItem = item;
                        comboBoxMultimedia.Focus();
                    }
                }
            }

            // Keyboard
            else
            {
                textKeyboard.Focus();
            }

            textKeyboard.Text = keys;
            textCustom.Text   = keys;
        }
 /// <summary>
 ///     Add a Button binding that can be checked for state (Pressed, Released, Active)
 /// </summary>
 public static bool AddBinding(this InputManager inputManager, string bindingName,
                               Buttons button, params InputBinding[] modifiers)
 {
     DefaultBinding inputBinding = new ButtonBinding(button, modifiers);
     return inputManager.AddBinding(bindingName, inputBinding);
 }
 public static Hotkey BindingToHotkey(ButtonBinding binding)
 {
     return(new Hotkey(binding.Keys, null, true, ReferenceEquals(binding, Settings.KeyFastForward)));
 }
Exemple #9
0
 /// <summary>
 /// Links a real button to the virtual button
 /// </summary>
 /// <param name="btn">Button instance</param>
 /// <param name="priority">Priority of the button</param>
 public void AddButton(AbstractButton btn, short priority)
 {
     ButtonBinding binding = new ButtonBinding(btn, priority);
     _hardwareButtons.Add(binding);
     _hardwareButtons.Sort(ButtonBinding.Comparison);
 }
Exemple #10
0
            /// <summary>
            /// Compare two instance of ButtonBinding
            /// </summary>
            /// <param name="first">First instance</param>
            /// <param name="second">Second instance</param>
            /// <returns>Return a value indicating the position of the first instance</returns>
            internal static int Comparison(ButtonBinding first, ButtonBinding second)
            {
                if (first._priority < second._priority) return -1;

                return (first._priority > second._priority) ? 1 : 0;
            }
Exemple #11
0
        public CustomBirdTutorial(EntityData data, Vector2 offset)
            : base(data, offset)
        {
            BirdId   = data.Attr("birdId");
            onlyOnce = data.Bool("onlyOnce");
            caw      = data.Bool("caw");
            Facing   = data.Bool("faceLeft") ? Facings.Left : Facings.Right;

            // apply the facing immediately
            Sprite.Scale.X = (float)Facing;

            object info;

            object[] controls;

            // parse the info ("title")
            string infoString = data.Attr("info");

            if (GFX.Gui.Has(infoString))
            {
                info = GFX.Gui[infoString];
            }
            else
            {
                info = Dialog.Clean(infoString);
            }

            int extraAdvance = 0;

            // go ahead and parse the controls. Controls can be textures, VirtualButtons, directions or strings.
            string[] controlsStrings = data.Attr("controls").Split(',');
            controls = new object[controlsStrings.Length];
            for (int i = 0; i < controls.Length; i++)
            {
                string controlString = controlsStrings[i];

                object modCommand = Everest.Events.CustomBirdTutorial.ParseCommand(controlString);
                if (modCommand is ButtonBinding binding)
                {
                    // convert ButtonBinding to VirtualButton for convenience.
                    modCommand = binding.Button;
                }

                if (modCommand != null)
                {
                    // this is a command a mod registered.
                    controls[i] = modCommand;
                }
                else if (controlString.StartsWith("mod:"))
                {
                    // formatted like `mod:MaxHelpingHand/ShowHints`
                    string[]      autoBinding = controlString.Substring(4).Split('/');
                    EverestModule module      = Everest.Modules.FirstOrDefault(m => m.Metadata.Name == autoBinding[0]);
                    if (module?.SettingsType != null)
                    {
                        PropertyInfo  matchingInput = module.SettingsType.GetProperty(autoBinding[1]);
                        ButtonBinding val           = matchingInput?.GetGetMethod()?.Invoke(module._Settings, null) as ButtonBinding;
                        if (val?.Button != null)
                        {
                            controls[i] = val.Button;
                        }
                        else
                        {
                            Logger.Log(LogLevel.Warn, "CustomBird", $"Public ButtonBinding property not found in {module.SettingsType}. ControlString: {controlString}");
                        }
                    }
                    else
                    {
                        Logger.Log(LogLevel.Warn, "CustomBird", "EverestModule or EverestModule.SettingsType not found. ControlString: " + controlString);
                    }
                }
                else if (GFX.Gui.Has(controlString))
                {
                    // this is a texture.
                    controls[i] = GFX.Gui[controlString];
                }
                else if (directions.ContainsKey(controlString))
                {
                    // this is a direction.
                    controls[i] = directions[controlString];
                }
                else
                {
                    FieldInfo matchingInput = typeof(Input).GetField(controlString, BindingFlags.Static | BindingFlags.Public);
                    if (matchingInput?.GetValue(null)?.GetType() == typeof(VirtualButton))
                    {
                        // this is a button.
                        controls[i] = matchingInput.GetValue(null);
                    }
                    else
                    {
                        if (controlString.StartsWith("dialog:"))
                        {
                            // treat that as a dialog key.
                            controls[i] = Dialog.Clean(controlString.Substring("dialog:".Length));
                        }
                        else
                        {
                            // treat that as a plain string.
                            controls[i] = controlString;
                        }
                    }
                }

                if (controls[i] is string)
                {
                    // when BirdTutorialGui renders text, it is offset by 1px on the right.
                    // width computation doesn't take this 1px into account, so we should add it back in.
                    extraAdvance++;
                    if (i == 0)
                    {
                        // as the text is rendered 1px to the right, if the first thing is a string, there will be 1px more padding on the left.
                        // we should add that extra px on the right as well.
                        extraAdvance++;
                    }
                }
            }

            gui = new BirdTutorialGui(this, new Vector2(0f, -16f), info, controls);

            DynData <BirdTutorialGui> guiData = new DynData <BirdTutorialGui>(gui);

            // if there is no first line, resize the bubble accordingly.
            if (string.IsNullOrEmpty(infoString))
            {
                guiData["infoHeight"] = 0f;
            }
            // apply the extra width.
            guiData["controlsWidth"] = guiData.Get <float>("controlsWidth") + extraAdvance;
        }