public void ProcessBindMode(JoystickUpdate state)
        {
            var newAngle          = state.Value;
            var newDirectionState =
                newAngle == -1
                    ? 0
                    : PovHelper.StateFromAngle(newAngle, _thisAngle);

            if (newDirectionState != _lastState)
            {
                OnBindMode(this, new InputReportEventArgs(new InputReport(_inputDescriptor, newDirectionState)));
                _lastState = newDirectionState;
            }
        }
        public void ProcessSubscriptionMode(JoystickUpdate state)
        {
            var newAngle          = state.Value;
            var newDirectionState =
                newAngle == -1
                    ? 0
                    : PovHelper.StateFromAngle(newAngle, _thisAngle);

            if (newDirectionState != _lastState)
            {
                foreach (var observer in _observers)
                {
                    ThreadPool.QueueUserWorkItem(threadProc => observer.OnNext(new InputReport(_inputDescriptor, newDirectionState)));
                }
                _lastState = newDirectionState;
            }
        }
Example #3
0
        public BindingUpdate[] Process(BindingUpdate update)
        {
            var ret      = new List <BindingUpdate>();
            var newAngle = update.Value;

            if (_currentValue == newAngle)
            {
                return(ret.ToArray());
            }
            _currentValue = newAngle;
            for (var i = 0; i < 4; i++)
            {
                var currentDirectionState = _directionStates[i];
                var newDirectionState     =
                    newAngle == -1 ? 0
                        : PovHelper.StateFromAngle(newAngle, i * 9000);

                if (newDirectionState == currentDirectionState)
                {
                    continue;
                }

                _directionStates[i] = newDirectionState;
                ret.Add(new BindingUpdate
                {
                    Value   = newDirectionState,
                    Binding = new BindingDescriptor
                    {
                        Type     = BindingType.POV,
                        Index    = update.Binding.Index,
                        SubIndex = i
                    }
                });
            }

            return(ret.ToArray());
        }