private void JoystickUpdateListener(JoystickUpdateEventArgs args)
        {
            if (args == null)
            {
                return;
            }

            ChannelData?.FirstOrDefault(fd => fd.Channel == JoystickChannel.JoystickAxisX)?.SetValue(args.AxisX);
            ChannelData?.FirstOrDefault(fd => fd.Channel == JoystickChannel.JoystickAxisY)?.SetValue(args.AxisY);
            ChannelData?.FirstOrDefault(fd => fd.Channel == JoystickChannel.JoystickAxisZ)?.SetValue(args.AxisZ);
            ChannelData?.FirstOrDefault(fd => fd.Channel == JoystickChannel.JoystickRotationX)?.SetValue(args.RotationX);
            ChannelData?.FirstOrDefault(fd => fd.Channel == JoystickChannel.JoystickRotationY)?.SetValue(args.RotationY);
            ChannelData?.FirstOrDefault(fd => fd.Channel == JoystickChannel.JoystickRotationZ)?.SetValue(args.RotationZ);
            ChannelData?.FirstOrDefault(fd => fd.Channel == JoystickChannel.JoystickSlider0)?.SetValue(args.Slider0);
            ChannelData?.FirstOrDefault(fd => fd.Channel == JoystickChannel.JoystickSlider1)?.SetValue(args.Slider1);
        }
Ejemplo n.º 2
0
        private void PollJoystick()
        {
            _pollingTask = Task.Factory.StartNew(() =>
            {
                var lastSate = new List <JoystickUpdate>();

                var joystick = new Joystick(_directInput, _deviceGuid)
                {
                    Properties =
                    {
                        BufferSize =                       0,
                        AxisMode   = DeviceAxisMode.Absolute,
                        Range      = new InputRange(0, 1000)
                    }
                };

                joystick.SetCooperativeLevel(IntPtr.Zero, CooperativeLevel.Background | CooperativeLevel.NonExclusive);

                joystick.Acquire();

                while (!_quitPolling)
                {
                    try
                    {
                        joystick.Poll();

                        var data = new JoystickState();

                        joystick.GetCurrentState(ref data);

                        var args = new JoystickUpdateEventArgs(data.X, data.Y, data.Z, data.RotationX, data.RotationY, data.RotationZ, data.Sliders[0], data.Sliders[1]);
                        JoystickUpdate?.Invoke(this, args);
                        GlobalEventAggregator.Instance.SendMessage(args);

                        //Debug.WriteLine("X: {0}, Y: {1}, Z: {2}", data.X, data.Y, data.Z);

                        //var data1 = joystick.GetBufferedData();

                        //foreach (var state in data1)
                        //{

                        //  var lastUpdate = lastSate.FirstOrDefault(f => f.Offset == state.Offset);

                        //  if (lastUpdate.Timestamp == 0)
                        //  {
                        //    lastSate.Add(state);
                        //  }

                        //  if (state.Offset == JoystickOffset.X && state.Value != lastUpdate.Value)
                        //  {
                        //    ////PostAxisValue(iDevice, HID_USAGE_X, state.lX);
                        //    Debug.WriteLine("{0}: {1}", state.Offset, state.Value);
                        //  }

                        //  lastUpdate = state;

                        //}


                        //Task.Delay(10);
                    }
                    catch (SharpDX.SharpDXException e)
                    {
                        StopCapture();
                    }
                }

                joystick.Dispose();
            });
        }