Пример #1
0
 /// <summary>
 /// Register new Actions triggered by a Mouse event
 /// </summary>
 /// <param name="action">The action</param>
 /// <param name="inputActivationMode">The input mode that will be needed to make this action fired</param>
 /// <param name="bindingKey">The keybard binding</param>
 public void AddActions(MouseTriggeredAction mouseAction, bool rebind = false)
 {
     if (rebind)
     {
         //Remove the previously added Action
         int nbr = _mouseActions.RemoveAll(x => x.ActionId == mouseAction.ActionId && x.TriggerType == mouseAction.TriggerType);
         logger.Warn("Rebinded MouseBinding remove more than one action : {0}", nbr);
     }
     _mouseActions.Add(mouseAction);
 }
Пример #2
0
        private void ProcessMouseStates()
        {
            //Refresh mouse states
            _prevMouseState = _curMouseState;
            _curMouseState  = _mouseManager.Mouse.GetState();

            //Check if an action needs to be triggered
            for (int i = 0; i < _mouseActions.Count; i++)
            {
                _mouseAction = _mouseActions[i];

                //has this mouse action the need to be applied only in "Mouse Capture" mode ?
                if (_mouseAction.WithCursorLocked != null)
                {
                    if (_mouseAction.WithCursorLocked != _mouseManager.MouseCapture)
                    {
                        continue;
                    }
                }

                switch (_mouseAction.TriggerType)
                {
                case MouseTriggerMode.ButtonDown:
                    switch (_mouseAction.Binding)
                    {
                    case MouseButton.LeftButton:
                        if (_curMouseState.LeftButton == ButtonState.Pressed)
                        {
                            _bufferedActionsInProgress[_mouseAction.ActionId].Triggered = true; _bufferedActionsInProgress[_mouseAction.ActionId].RaisedSources |= ActionRaisedSources.Mouse;
                        }
                        break;

                    case MouseButton.MiddleButton:
                        if (_curMouseState.MiddleButton == ButtonState.Pressed)
                        {
                            _bufferedActionsInProgress[_mouseAction.ActionId].Triggered = true; _bufferedActionsInProgress[_mouseAction.ActionId].RaisedSources |= ActionRaisedSources.Mouse;
                        }
                        break;

                    case MouseButton.RightButton:
                        if (_curMouseState.RightButton == ButtonState.Pressed)
                        {
                            _bufferedActionsInProgress[_mouseAction.ActionId].Triggered = true; _bufferedActionsInProgress[_mouseAction.ActionId].RaisedSources |= ActionRaisedSources.Mouse;
                        }
                        break;

                    case MouseButton.XButton1:
                        if (_curMouseState.XButton1 == ButtonState.Pressed)
                        {
                            _bufferedActionsInProgress[_mouseAction.ActionId].Triggered = true; _bufferedActionsInProgress[_mouseAction.ActionId].RaisedSources |= ActionRaisedSources.Mouse;
                        }
                        break;

                    case MouseButton.XButton2:
                        if (_curMouseState.XButton2 == ButtonState.Pressed)
                        {
                            _bufferedActionsInProgress[_mouseAction.ActionId].Triggered = true; _bufferedActionsInProgress[_mouseAction.ActionId].RaisedSources |= ActionRaisedSources.Mouse;
                        }
                        break;

                    case MouseButton.LeftAndRightButton:
                        if (_curMouseState.LeftButton == ButtonState.Pressed && _curMouseState.RightButton == ButtonState.Pressed)
                        {
                            _bufferedActionsInProgress[_mouseAction.ActionId].Triggered = true; _bufferedActionsInProgress[_mouseAction.ActionId].RaisedSources |= ActionRaisedSources.Mouse;
                        }
                        break;
                    }
                    break;

                case MouseTriggerMode.ButtonReleased:
                    //Set the Action Flag if required
                    switch (_mouseAction.Binding)
                    {
                    case MouseButton.LeftButton:
                        if (_curMouseState.LeftButton == ButtonState.Released && _prevMouseState.LeftButton == ButtonState.Pressed)
                        {
                            _bufferedActionsInProgress[_mouseAction.ActionId].Triggered = true; _bufferedActionsInProgress[_mouseAction.ActionId].RaisedSources |= ActionRaisedSources.Mouse;
                        }
                        break;

                    case MouseButton.MiddleButton:
                        if (_curMouseState.MiddleButton == ButtonState.Released && _prevMouseState.MiddleButton == ButtonState.Pressed)
                        {
                            _bufferedActionsInProgress[_mouseAction.ActionId].Triggered = true; _bufferedActionsInProgress[_mouseAction.ActionId].RaisedSources |= ActionRaisedSources.Mouse;
                        }
                        break;

                    case MouseButton.RightButton:
                        if (_curMouseState.RightButton == ButtonState.Released && _prevMouseState.RightButton == ButtonState.Pressed)
                        {
                            _bufferedActionsInProgress[_mouseAction.ActionId].Triggered = true; _bufferedActionsInProgress[_mouseAction.ActionId].RaisedSources |= ActionRaisedSources.Mouse;
                        }
                        break;

                    case MouseButton.XButton1:
                        if (_curMouseState.XButton1 == ButtonState.Released && _prevMouseState.XButton1 == ButtonState.Pressed)
                        {
                            _bufferedActionsInProgress[_mouseAction.ActionId].Triggered = true; _bufferedActionsInProgress[_mouseAction.ActionId].RaisedSources |= ActionRaisedSources.Mouse;
                        }
                        break;

                    case MouseButton.XButton2:
                        if (_curMouseState.XButton2 == ButtonState.Released && _prevMouseState.XButton2 == ButtonState.Pressed)
                        {
                            _bufferedActionsInProgress[_mouseAction.ActionId].Triggered = true; _bufferedActionsInProgress[_mouseAction.ActionId].RaisedSources |= ActionRaisedSources.Mouse;
                        }
                        break;

                    case MouseButton.LeftAndRightButton:
                        if (_curMouseState.LeftButton == ButtonState.Released && _prevMouseState.LeftButton == ButtonState.Pressed && _curMouseState.RightButton == ButtonState.Released && _prevMouseState.RightButton == ButtonState.Pressed)
                        {
                            _bufferedActionsInProgress[_mouseAction.ActionId].Triggered = true; _bufferedActionsInProgress[_mouseAction.ActionId].RaisedSources |= ActionRaisedSources.Mouse;
                        }
                        break;
                    }
                    break;

                case MouseTriggerMode.ButtonPressed:

                    //Set the Action Flag if required
                    switch (_mouseAction.Binding)
                    {
                    case MouseButton.LeftButton:
                        if (_mouseAction.WithAutoResetButtonPressed && _mouseAction.StartTimeAutoResetTick == 0 && _curMouseState.LeftButton == ButtonState.Pressed)
                        {
                            //Mouse Button DOWN and autoresetting its ButtonPressed value - Memorize when the time when the mouse has been pressed
                            _mouseAction.StartTimeAutoResetTick = Stopwatch.GetTimestamp();
                        }

                        if (_mouseAction.WithAutoResetButtonPressed)
                        {
                            _actionTimeElapsedInS = (float)(((Stopwatch.GetTimestamp() - _mouseAction.StartTimeAutoResetTick) / (float)Stopwatch.Frequency));
                        }

                        if ((_prevMouseState.LeftButton == ButtonState.Released && _curMouseState.LeftButton == ButtonState.Pressed) ||
                            (_mouseAction.WithAutoResetButtonPressed && _curMouseState.LeftButton == ButtonState.Pressed && _actionTimeElapsedInS >= _mouseAction.AutoResetTimeInS)
                            )
                        {
                            _bufferedActionsInProgress[_mouseAction.ActionId].Triggered      = true;
                            _bufferedActionsInProgress[_mouseAction.ActionId].RaisedSources |= ActionRaisedSources.Mouse;
                            if (_prevMouseState.LeftButton == ButtonState.Pressed)
                            {
                                _bufferedActionsInProgress[_mouseAction.ActionId].IsAutoRepeatedEvent = true;
                            }
                            if (_mouseAction.WithAutoResetButtonPressed)
                            {
                                _mouseAction.StartTimeAutoResetTick = Stopwatch.GetTimestamp();
                            }
                        }

                        if (_mouseAction.WithAutoResetButtonPressed && _curMouseState.LeftButton != ButtonState.Pressed)
                        {
                            _mouseAction.StartTimeAutoResetTick = 0;
                        }
                        break;

                    case MouseButton.MiddleButton:
                        if (_mouseAction.WithAutoResetButtonPressed && _mouseAction.StartTimeAutoResetTick == 0 && _curMouseState.middleButton == ButtonState.Pressed)
                        {
                            //Mouse Button DOWN and autoresetting its ButtonPressed value - Memorize when the time when the mouse has been pressed
                            _mouseAction.StartTimeAutoResetTick = Stopwatch.GetTimestamp();
                        }

                        if (_mouseAction.WithAutoResetButtonPressed)
                        {
                            _actionTimeElapsedInS = (float)(((Stopwatch.GetTimestamp() - _mouseAction.StartTimeAutoResetTick) / (float)Stopwatch.Frequency));
                        }

                        if ((_prevMouseState.middleButton == ButtonState.Released && _curMouseState.middleButton == ButtonState.Pressed) ||
                            (_mouseAction.WithAutoResetButtonPressed && _curMouseState.middleButton == ButtonState.Pressed && _actionTimeElapsedInS >= _mouseAction.AutoResetTimeInS)
                            )
                        {
                            _bufferedActionsInProgress[_mouseAction.ActionId].Triggered      = true;
                            _bufferedActionsInProgress[_mouseAction.ActionId].RaisedSources |= ActionRaisedSources.Mouse;
                            if (_prevMouseState.middleButton == ButtonState.Pressed)
                            {
                                _bufferedActionsInProgress[_mouseAction.ActionId].IsAutoRepeatedEvent = true;
                            }
                            if (_mouseAction.WithAutoResetButtonPressed)
                            {
                                _mouseAction.StartTimeAutoResetTick = Stopwatch.GetTimestamp();
                            }
                        }

                        if (_mouseAction.WithAutoResetButtonPressed && _curMouseState.middleButton != ButtonState.Pressed)
                        {
                            _mouseAction.StartTimeAutoResetTick = 0;
                        }
                        break;

                    case MouseButton.RightButton:
                        if (_mouseAction.WithAutoResetButtonPressed && _mouseAction.StartTimeAutoResetTick == 0 && _curMouseState.rightButton == ButtonState.Pressed)
                        {
                            //Mouse Button DOWN and autoresetting its ButtonPressed value - Memorize when the time when the mouse has been pressed
                            _mouseAction.StartTimeAutoResetTick = Stopwatch.GetTimestamp();
                        }

                        if (_mouseAction.WithAutoResetButtonPressed)
                        {
                            _actionTimeElapsedInS = (float)(((Stopwatch.GetTimestamp() - _mouseAction.StartTimeAutoResetTick) / (float)Stopwatch.Frequency));
                        }

                        if ((_prevMouseState.rightButton == ButtonState.Released && _curMouseState.rightButton == ButtonState.Pressed) ||
                            (_mouseAction.WithAutoResetButtonPressed && _curMouseState.rightButton == ButtonState.Pressed && _actionTimeElapsedInS >= _mouseAction.AutoResetTimeInS)
                            )
                        {
                            _bufferedActionsInProgress[_mouseAction.ActionId].Triggered      = true;
                            _bufferedActionsInProgress[_mouseAction.ActionId].RaisedSources |= ActionRaisedSources.Mouse;
                            if (_prevMouseState.rightButton == ButtonState.Pressed)
                            {
                                _bufferedActionsInProgress[_mouseAction.ActionId].IsAutoRepeatedEvent = true;
                            }
                            if (_mouseAction.WithAutoResetButtonPressed)
                            {
                                _mouseAction.StartTimeAutoResetTick = Stopwatch.GetTimestamp();
                            }
                        }

                        if (_mouseAction.WithAutoResetButtonPressed && _curMouseState.rightButton != ButtonState.Pressed)
                        {
                            _mouseAction.StartTimeAutoResetTick = 0;
                        }
                        break;

                    case MouseButton.XButton1:
                        if (_mouseAction.WithAutoResetButtonPressed && _mouseAction.StartTimeAutoResetTick == 0 && _curMouseState.XButton1 == ButtonState.Pressed)
                        {
                            //Mouse Button DOWN and autoresetting its ButtonPressed value - Memorize when the time when the mouse has been pressed
                            _mouseAction.StartTimeAutoResetTick = Stopwatch.GetTimestamp();
                        }

                        if (_mouseAction.WithAutoResetButtonPressed)
                        {
                            _actionTimeElapsedInS = (float)(((Stopwatch.GetTimestamp() - _mouseAction.StartTimeAutoResetTick) / (float)Stopwatch.Frequency));
                        }

                        if ((_prevMouseState.XButton1 == ButtonState.Released && _curMouseState.XButton1 == ButtonState.Pressed) ||
                            (_mouseAction.WithAutoResetButtonPressed && _curMouseState.XButton1 == ButtonState.Pressed && _actionTimeElapsedInS >= _mouseAction.AutoResetTimeInS)
                            )
                        {
                            _bufferedActionsInProgress[_mouseAction.ActionId].Triggered      = true;
                            _bufferedActionsInProgress[_mouseAction.ActionId].RaisedSources |= ActionRaisedSources.Mouse;
                            if (_prevMouseState.XButton1 == ButtonState.Pressed)
                            {
                                _bufferedActionsInProgress[_mouseAction.ActionId].IsAutoRepeatedEvent = true;
                            }
                            if (_mouseAction.WithAutoResetButtonPressed)
                            {
                                _mouseAction.StartTimeAutoResetTick = Stopwatch.GetTimestamp();
                            }
                        }

                        if (_mouseAction.WithAutoResetButtonPressed && _curMouseState.XButton1 != ButtonState.Pressed)
                        {
                            _mouseAction.StartTimeAutoResetTick = 0;
                        }
                        break;

                    case MouseButton.XButton2:
                        if (_mouseAction.WithAutoResetButtonPressed && _mouseAction.StartTimeAutoResetTick == 0 && _curMouseState.XButton2 == ButtonState.Pressed)
                        {
                            //Mouse Button DOWN and autoresetting its ButtonPressed value - Memorize when the time when the mouse has been pressed
                            _mouseAction.StartTimeAutoResetTick = Stopwatch.GetTimestamp();
                        }

                        if (_mouseAction.WithAutoResetButtonPressed)
                        {
                            _actionTimeElapsedInS = (float)(((Stopwatch.GetTimestamp() - _mouseAction.StartTimeAutoResetTick) / (float)Stopwatch.Frequency));
                        }

                        if ((_prevMouseState.XButton2 == ButtonState.Released && _curMouseState.XButton2 == ButtonState.Pressed) ||
                            (_mouseAction.WithAutoResetButtonPressed && _curMouseState.XButton2 == ButtonState.Pressed && _actionTimeElapsedInS >= _mouseAction.AutoResetTimeInS)
                            )
                        {
                            _bufferedActionsInProgress[_mouseAction.ActionId].Triggered      = true;
                            _bufferedActionsInProgress[_mouseAction.ActionId].RaisedSources |= ActionRaisedSources.Mouse;
                            if (_prevMouseState.XButton2 == ButtonState.Pressed)
                            {
                                _bufferedActionsInProgress[_mouseAction.ActionId].IsAutoRepeatedEvent = true;
                            }
                            if (_mouseAction.WithAutoResetButtonPressed)
                            {
                                _mouseAction.StartTimeAutoResetTick = Stopwatch.GetTimestamp();
                            }
                        }

                        if (_mouseAction.WithAutoResetButtonPressed && _curMouseState.XButton2 != ButtonState.Pressed)
                        {
                            _mouseAction.StartTimeAutoResetTick = 0;
                        }
                        break;

                    case MouseButton.LeftAndRightButton:

                        if (_mouseAction.WithAutoResetButtonPressed && _mouseAction.StartTimeAutoResetTick == 0 && _curMouseState.LeftButton == ButtonState.Pressed && _curMouseState.rightButton == ButtonState.Pressed)
                        {
                            //Mouse Button DOWN and autoresetting its ButtonPressed value - Memorize when the time when the mouse has been pressed
                            _mouseAction.StartTimeAutoResetTick = Stopwatch.GetTimestamp();
                        }

                        if (_mouseAction.WithAutoResetButtonPressed)
                        {
                            _actionTimeElapsedInS = (float)(((Stopwatch.GetTimestamp() - _mouseAction.StartTimeAutoResetTick) / (float)Stopwatch.Frequency));
                        }

                        if ((_prevMouseState.leftButton == ButtonState.Released && _curMouseState.leftButton == ButtonState.Pressed && _prevMouseState.rightButton == ButtonState.Released && _curMouseState.rightButton == ButtonState.Pressed) ||
                            (_mouseAction.WithAutoResetButtonPressed && _curMouseState.rightButton == ButtonState.Pressed && _curMouseState.leftButton == ButtonState.Pressed && _actionTimeElapsedInS >= _mouseAction.AutoResetTimeInS)
                            )
                        {
                            _bufferedActionsInProgress[_mouseAction.ActionId].Triggered      = true;
                            _bufferedActionsInProgress[_mouseAction.ActionId].RaisedSources |= ActionRaisedSources.Mouse;
                            if (_prevMouseState.leftButton == ButtonState.Pressed && _prevMouseState.rightButton == ButtonState.Pressed)
                            {
                                _bufferedActionsInProgress[_mouseAction.ActionId].IsAutoRepeatedEvent = true;
                            }
                            if (_mouseAction.WithAutoResetButtonPressed)
                            {
                                _mouseAction.StartTimeAutoResetTick = Stopwatch.GetTimestamp();
                            }
                        }

                        if (_mouseAction.WithAutoResetButtonPressed && _curMouseState.leftButton != ButtonState.Pressed && _curMouseState.rightButton != ButtonState.Pressed)
                        {
                            _mouseAction.StartTimeAutoResetTick = 0;
                        }

                        break;
                    }
                    break;

                case MouseTriggerMode.ScrollWheelForward:
                    if (_curMouseState.ScrollWheelTicks > _prevMouseState.ScrollWheelTicks)
                    {
                        _bufferedActionsInProgress[_mouseAction.ActionId].Triggered = true; _bufferedActionsInProgress[_mouseAction.ActionId].RaisedSources |= ActionRaisedSources.Mouse;
                    }
                    break;

                case MouseTriggerMode.ScrollWheelBackWard:
                    if (_curMouseState.ScrollWheelTicks < _prevMouseState.ScrollWheelTicks)
                    {
                        _bufferedActionsInProgress[_mouseAction.ActionId].Triggered = true; _bufferedActionsInProgress[_mouseAction.ActionId].RaisedSources |= ActionRaisedSources.Mouse;
                    }
                    break;
                }
            }
        }