private void DetectInputDevices() { this.lastInputDeviceUpdate = Time.MainTimer.TotalSeconds; GlobalGamepadInputSource.UpdateAvailableDecives(DualityApp.Gamepads); GlobalJoystickInputSource.UpdateAvailableDecives(DualityApp.Joysticks); }
public static void UpdateAvailableDecives(GamepadInputCollection 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 (GamepadInput input in inputManager) { GlobalGamepadInputSource existingDevice = input.Source as GlobalGamepadInputSource; 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 GlobalGamepadInputSource(cachedDevices.Count)); } GlobalGamepadInputSource gamepad = cachedDevices[deviceIndex]; gamepad.UpdateState(); if (gamepad.IsAvailable) { inputManager.AddSource(gamepad); App.Log( "Detected new Gamepad Input: \"{0}\" ({1} | {2}) at index {3}", gamepad.Id, gamepad.ProductId, gamepad.ProductName, deviceIndex); } else if (deviceIndex >= MinDeviceCheckCount) { break; } } }
public static void UpdateAvailableDecives(GamepadInputCollection inputManager) { const int MinDeviceCheckCount = 8; // Determine which devices are currently active already, so we can skip their indices List <int> skipIndices = null; foreach (GamepadInput input in inputManager) { GlobalGamepadInputSource existingDevice = input.Source as GlobalGamepadInputSource; 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; } GlobalGamepadInputSource gamepad = new GlobalGamepadInputSource(deviceIndex); gamepad.UpdateState(); if (gamepad.IsAvailable) { inputManager.AddSource(gamepad); } 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(GamepadInputCollection inputManager) { const int MinDeviceCheckCount = 8; // Determine which devices are currently active already, so we can skip their indices List<int> skipIndices = null; foreach (GamepadInput input in inputManager) { GlobalGamepadInputSource existingDevice = input.Source as GlobalGamepadInputSource; 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; GlobalGamepadInputSource gamepad = new GlobalGamepadInputSource(deviceIndex); gamepad.UpdateState(); if (gamepad.IsAvailable) inputManager.AddSource(gamepad); else if (deviceIndex >= MinDeviceCheckCount) break; } }