public static void UpdateAvailableDecives(JoystickInputCollection inputManager) { const int MinDeviceCheckCount = 8; const int MaxDeviceCheckCount = 32; // Determine which devices are currently active already, so we can skip their indices List <int> skipIndices = null; foreach (JoystickInput input in inputManager) { GlobalJoystickInputSource existingDevice = input.Source as GlobalJoystickInputSource; if (existingDevice != null) { if (skipIndices == null) { skipIndices = new List <int>(); } skipIndices.Add(existingDevice.deviceIndex); } } // Iterate over device indices and see what responds int deviceIndex = -1; while (deviceIndex < MaxDeviceCheckCount) { deviceIndex++; if (skipIndices != null && skipIndices.Contains(deviceIndex)) { continue; } while (deviceIndex >= cachedDevices.Count) { cachedDevices.Add(new GlobalJoystickInputSource(cachedDevices.Count)); } GlobalJoystickInputSource joystick = cachedDevices[deviceIndex]; joystick.UpdateState(); if (joystick.IsAvailable) { inputManager.AddSource(joystick); Log.Write(LogType.Verbose, "Detected new Joystick Input: \"{0}\" ({1} | {2}) at index {3}" + Environment.NewLine + "Capabilities: {4} axes, {5} buttons, {6} hats", joystick.Id, joystick.ProductId, joystick.ProductName, deviceIndex, joystick.AxisCount, joystick.ButtonCount, joystick.HatCount); } else if (deviceIndex >= MinDeviceCheckCount) { break; } } }
private void DetectInputDevices() { this.lastInputDeviceUpdate = Time.MainTimer.TotalSeconds; GlobalGamepadInputSource.UpdateAvailableDecives(DualityApp.Gamepads); GlobalJoystickInputSource.UpdateAvailableDecives(DualityApp.Joysticks); }
public static void UpdateAvailableDecives(JoystickInputCollection inputManager) { const int MinDeviceCheckCount = 8; // Determine which devices are currently active already, so we can skip their indices List <int> skipIndices = null; foreach (JoystickInput input in inputManager) { GlobalJoystickInputSource existingDevice = input.Source as GlobalJoystickInputSource; if (existingDevice != null) { if (skipIndices == null) { skipIndices = new List <int>(); } skipIndices.Add(existingDevice.deviceIndex); } } // Iterate over device indices and see what responds int deviceIndex = -1; while (true) { deviceIndex++; if (skipIndices != null && skipIndices.Contains(deviceIndex)) { continue; } GlobalJoystickInputSource joystick = new GlobalJoystickInputSource(deviceIndex); joystick.UpdateState(); if (joystick.IsAvailable) { inputManager.AddSource(joystick); } else if (deviceIndex >= MinDeviceCheckCount) { break; } } }
protected override void InitPlugin() { base.InitPlugin(); mainThread = Thread.CurrentThread; // Initialize OpenTK { bool inEditor = DualityApp.ExecEnvironment == DualityApp.ExecutionEnvironment.Editor; ToolkitOptions options = new ToolkitOptions { // Prefer the native backend in the editor, because it supports GLControl. SDL doesn't. Backend = inEditor ? PlatformBackend.PreferNative : PlatformBackend.Default, // Disable High Resolution support in the editor, because it's not DPI-Aware EnableHighResolution = !inEditor }; Toolkit.Init(options); } // Register global / non-windowbound input devices GlobalGamepadInputSource.UpdateAvailableDecives(DualityApp.Gamepads); GlobalJoystickInputSource.UpdateAvailableDecives(DualityApp.Joysticks); }
public static void UpdateAvailableDecives(JoystickInputCollection inputManager) { const int MinDeviceCheckCount = 8; // Determine which devices are currently active already, so we can skip their indices List<int> skipIndices = null; foreach (JoystickInput input in inputManager) { GlobalJoystickInputSource existingDevice = input.Source as GlobalJoystickInputSource; if (existingDevice != null) { if (skipIndices == null) skipIndices = new List<int>(); skipIndices.Add(existingDevice.deviceIndex); } } // Iterate over device indices and see what responds int deviceIndex = -1; while (true) { deviceIndex++; if (skipIndices != null && skipIndices.Contains(deviceIndex)) continue; GlobalJoystickInputSource joystick = new GlobalJoystickInputSource(deviceIndex); joystick.UpdateState(); if (joystick.IsAvailable) inputManager.AddSource(joystick); else if (deviceIndex >= MinDeviceCheckCount) break; } }