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