Example #1
0
        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;
                }
            }
        }
Example #3
0
        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;
                }
            }
        }
Example #4
0
        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;
            }
        }