Esempio n. 1
0
        public void RefreshDescription()
        {
            if (!DisplayInputParams.Get(Device.ProductGuid.ToString(), out var displayName, out var axisP, out var buttonsP, out var povsP) &&
                IsController)
            {
                DisplayInputParams.Get(DirectInputDeviceUtils.GetXboxControllerGuid(), out _, out axisP, out buttonsP, out povsP);
            }

            DisplayName = displayName ?? FixDisplayName(Device.InstanceName);
            if (OptionStrictIndices)
            {
                DisplayName += $@" (#{Index + 1})";
            }

            Proc(Axis, axisP);
            Proc(Buttons, buttonsP);
            Proc(Povs, povsP);

            void Proc(IEnumerable <IInputProvider> items, DisplayInputParams p)
            {
                foreach (var t in items)
                {
                    t.SetDisplayParams(p?.Name(t.Id), p?.Test(t.Id) ?? true);
                }
            }

            VisibleAxis    = Axis.Where(x => x.IsVisible).ToList();
            VisibleButtons = Buttons.Where(x => x.IsVisible).ToList();
            VisiblePovs    = Povs.Where(x => x.IsVisible).ToList();
            OnPropertyChanged(nameof(VisibleAxis));
            OnPropertyChanged(nameof(VisibleButtons));
            OnPropertyChanged(nameof(VisiblePovs));
        }
Esempio n. 2
0
        public PlaceholderInputDevice([CanBeNull] string id, string displayName, int index)
        {
            Id             = id;
            Index          = index;
            IsController   = DirectInputDeviceUtils.IsController(displayName);
            OriginalIniIds = new List <int> {
                index
            };

            if (id != null && DisplayInputParams.Get(id, out var gotDisplayName, out _axesP, out _buttonsP, out _povsP))
            {
                DisplayName = gotDisplayName;
            }
Esempio n. 3
0
        private DirectInputDevice([NotNull] Joystick device, int index)
        {
            Device = device.Information;

            InstanceId     = GuidToString(device.Information.InstanceGuid);
            ProductId      = GuidToString(device.Information.ProductGuid);
            Index          = index;
            IsController   = DirectInputDeviceUtils.IsController(device.Information.InstanceName);
            OriginalIniIds = new List <int>();

            _joystick = device;

            var window = Application.Current?.MainWindow;

            if (window != null)
            {
                try {
                    _joystick.SetCooperativeLevel(new WindowInteropHelper(window).Handle, CooperativeLevel.Background | CooperativeLevel.Nonexclusive);
                    _joystick.Properties.AxisMode = DeviceAxisMode.Absolute;

                    if (!Acquire(_joystick))
                    {
                        _joystick.SetCooperativeLevel(new WindowInteropHelper(window).Handle, CooperativeLevel.Background | CooperativeLevel.Nonexclusive);
                        Acquire(_joystick);
                    }
                } catch (Exception e) {
                    Logging.Warning("Can’t set cooperative level: " + e);
                }
            }

            Axis    = Enumerable.Range(0, 8).Select(x => new DirectInputAxle(this, x)).ToArray();
            Buttons = Enumerable.Range(0, _joystick.Capabilities.ButtonCount).Select(x => new DirectInputButton(this, x)).ToArray();
            Povs    = Enumerable.Range(0, _joystick.Capabilities.PovCount)
                      .SelectMany(x => Enumerable.Range(0, 4).Select(y => new { Id = x, Direction = (DirectInputPovDirection)y }))
                      .Select(x => new DirectInputPov(this, x.Id, x.Direction)).ToArray();
            RefreshDescription();
            FilesStorage.Instance.Watcher(ContentCategory.Controllers).Update += OnDefinitionsUpdate;
        }