Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
        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();
            });
        }