/// <summary> /// Handles the event when a controller connects. If the connected controller /// is valid, we add it to the _allowedConnectedDevices list. /// </summary> /// <param name="controllerId">The id of the controller.</param> private void HandleOnControllerConnected(byte controllerId) { MLInputController newController = MLInput.GetController(controllerId); if (IsDeviceAllowed(newController)) { if (_allowedConnectedDevices.Exists((device) => device.Id == controllerId)) { Debug.LogWarning(string.Format("Connected controller with id {0} already connected.", controllerId)); return; } _allowedConnectedDevices.Add(newController); // Notify Listeners if (OnControllerConnected != null) { OnControllerConnected.Invoke(controllerId); } } }
private void ComputeControllerTypes() { //Remove empty string to ignore disconnected sticks string[] unityNames = Input.GetJoystickNames(); List <string> tweakedNames = new List <string>(unityNames); for (int i = tweakedNames.Count - 1; i >= 0; i--) { if (tweakedNames[i] == null || tweakedNames[i] == string.Empty) { tweakedNames.RemoveAt(i); //Check to trigger disconnected event if (_disconnectedControllers.Contains(i + 1) == false) { _disconnectedControllers.Add(i + 1); //i + 1 will be the controller ID OnControllerDisconnected.Invoke(i + 1); } } //Check to trigger (re)connected event else if (_disconnectedControllers.Contains(i + 1) == true) { _disconnectedControllers.Remove(i + 1); //i + 1 will be the controller ID OnControllerConnected.Invoke(i + 1); } } //Check to trigger new controller connected event if (unityNames.Length > _unityControllerNames.Length) { for (int i = _unityControllerNames.Length; i < unityNames.Length; i++) { OnControllerConnected.Invoke(i + 1); } } //Only update if new controllers found if (tweakedNames.Count != _controllerNames.Length) { _unityControllerNames = unityNames; _controllerNames = tweakedNames.ToArray(); _controllerTypes = new ControllerType[_controllerNames.Length]; //Reset inputs aswell _lastAxesInputs = new InputDirection[_controllerNames.Length, AXES_COUNT]; _axesInputs = new InputDirection[_controllerNames.Length, AXES_COUNT]; //Then check name length to know weither its a PS4 or XBOX controller for (int i = 0; i < _controllerNames.Length; i++) { switch (_controllerNames[i].Length) { case 19: _controllerTypes[i] = ControllerType.PS4; continue; case 33: _controllerTypes[i] = ControllerType.xBox; continue; } _controllerTypes[i] = ControllerType.xBox; } //Lastly triggger count changed event OnControllerCountChange.Invoke(_controllerNames.Length); } }