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; } }
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()); }