private async void BaseControllerReader_ControllerStateChanged(IControllerReader sender, ControllerState state)
        {
            if (!disposedValue)
            {
                await Task.Delay(delayInMilliseconds);

                var controllerStateChanged = ControllerStateChanged;
                if (controllerStateChanged != null)
                    controllerStateChanged(this, state);
            }
        }
Esempio n. 2
0
        void reader_ControllerStateChanged (IControllerReader reader, ControllerState state)
        {
            foreach (var binding in _bindings) 
            {
                bool allRequiredButtonsDown = true;

                foreach (var requiredButton in binding.RequiredButtons) {
                    allRequiredButtonsDown &= state.Buttons [requiredButton];
                }

                if (allRequiredButtonsDown && !binding.CurrentlyDepressed) {
                    SendKeys.PressKey (binding.OutputKey);
                    binding.CurrentlyDepressed = true;
                }
                else if (!allRequiredButtonsDown && binding.CurrentlyDepressed) {
                    SendKeys.ReleaseKey (binding.OutputKey);
                    binding.CurrentlyDepressed = false;
                }
            }
        }
        public ControllerState Process (ControllerState state)
        {
            if (!Enabled) return state;

            _states.RemoveAt (0);
            _states.Add (state);

            var stateIsNoise = false;

            foreach (var button in _states[0].Buttons.Keys)
            {
                if (_states[0].Buttons[button] == _states[2].Buttons[button] &&
                    _states[0].Buttons[button] != _states[1].Buttons[button])
                {
                    stateIsNoise = true;
                    break;
                }
            }

            // TODO check analogs for erratic movement if no noise detected in buttons

            return stateIsNoise ? _states[2] : _states[1];
        }
Esempio n. 4
0
        void reader_ControllerStateChanged (IControllerReader reader, ControllerState newState)
        {
            newState = _blinkFilter.Process (newState);

            foreach (var button in _buttonsWithImages) 
            {
                if (!newState.Buttons.ContainsKey (button.Item1.Name)) continue;

                button.Item2.Visibility = newState.Buttons [button.Item1.Name] ? Visibility.Visible : Visibility.Hidden ;
            }

            foreach (var button in _rangeButtonsWithImages) 
            {
                if (!newState.Analogs.ContainsKey (button.Item1.Name)) continue;

                var value = newState.Analogs [button.Item1.Name];
                var visible = button.Item1.From <= value && value <= button.Item1.To;

                button.Item2.Visibility = visible ? Visibility.Visible : Visibility.Hidden ;
            }

            foreach (var stick in _sticksWithImages)
            {
                var skin = stick.Item1;
                var image = stick.Item2;

                float xrange = (skin.XReverse ? -1 :  1) * skin.XRange;
                float yrange = (skin.YReverse ?  1 : -1) * skin.YRange;

                var x = newState.Analogs.ContainsKey (skin.XName)
                      ? skin.Config.X + xrange * newState.Analogs [skin.XName]
                      : skin.Config.X ;

                var y = newState.Analogs.ContainsKey (skin.YName)
                      ? skin.Config.Y + yrange * newState.Analogs [skin.YName]
                      : skin.Config.Y ;
                
                image.Margin = new Thickness (x,y,0,0);
            }
            
            foreach (var trigger in _triggersWithGridImages)
            {
                var skin = trigger.Item1;
                var grid = trigger.Item2;

                if (!newState.Analogs.ContainsKey (skin.Name)) continue;

                var val = newState.Analogs [skin.Name];
                if (skin.UseNegative) val *= -1;
                if (skin.IsReversed) val = 1 - val;
                if (val < 0) val = 0;

                switch (skin.Direction) 
                {
                    case Skin.AnalogTrigger.DirectionValue.Right:
                        grid.Width = skin.Config.Width * val;
                        break;

                    case Skin.AnalogTrigger.DirectionValue.Left:
                        var width = skin.Config.Width * val;
                        var offx = skin.Config.Width - width;
                        grid.Margin = new Thickness (skin.Config.X + offx, skin.Config.Y, 0, 0);
                        grid.Width = width;
                        break;

                    case Skin.AnalogTrigger.DirectionValue.Down:
                        grid.Height = skin.Config.Height * val;
                        break;

                    case Skin.AnalogTrigger.DirectionValue.Up:
                        var height = skin.Config.Height * val;
                        var offy = skin.Config.Height - height;
                        grid.Margin = new Thickness (skin.Config.X, skin.Config.Y + offy, 0, 0);
                        grid.Height = height;
                        break;
                }
            }
        }