protected virtual void OnPositionDetected(PositionDetectedEventArgs args) { if (args == null) { throw new ArgumentNullException("args"); } EventHandler <PositionDetectedEventArgs> handler; lock (detectedEventSync) { handler = positionDetected; } if (handler != null) { handler(this, args); } }
public void PositionChanged(object sender, PositionDetectedEventArgs args) { // TODO: protect with locks var configCopy = config; VirtualDeviceManager.Instance.Invoke(delegate { VirtualDeviceManager.Instance.BeginUpdate(); var toRemove = new Queue <int>(); foreach (var pair in configCopy) { List <Binding> bindings = pair.Value; int deviceIndex = pair.Key; int deviceId = EquipmentMaster.Instance.VirtualDevice.GetEquipment(deviceIndex, -1); if (deviceId < 0) { LogManager.Instance.Log(LogEntry.CreateWarning(this, "Missing device " + deviceIndex)); continue; } IVirtualDevice device = VirtualDeviceManager.Instance.GetDevice(deviceId); if (device == null) { LogManager.Instance.Log(LogEntry.CreateWarning(this, "Missing device with id " + deviceId)); continue; } device.BeginUpdate(); foreach (Binding bind in pair.Value) { KeyState state = args.Position.GetAxis(bind.Axis); // TODO: apply mapping if (!device.SetKeyState(bind.Capability, bind.PosKey, state)) { string message = string.Format("Cannot set device {0} key state {1}|{2}", deviceIndex, bind.PosKey, bind.NegKey); LogManager.Instance.Log(LogEntry.CreateWarning(this, message)); } } device.EndUpdate(); } VirtualDeviceManager.Instance.EndUpdate(); }); }