void OnControllerDisconnect(int instanceId) { Debug.Log("Removed controller device " + instanceId); IntPtr removedController = SDL.SDL_GameControllerFromInstanceID(instanceId); Debug.Assert(removedController != IntPtr.Zero); for (int i = 0; i < controllers.Count; ++i) { if (controllers[i].sdlHandle == removedController) { IInputDevice device = controllers[i]; controllers[i].Disconnect(); SDL.SDL_GameControllerClose(removedController); bool deviceRemoved = devices.Remove(controllers[i]); Debug.Assert(deviceRemoved); controllers.RemoveAt(i); disconnectEvent.Fire(device); Debug.Log("Controller count = " + controllers.Count); Debug.Log("Device count = " + devices.Count); return; } } Debug.Assert(false, "Unable to find controller " + instanceId + " to remove"); }
void Close(bool rebindSuccess) { this.device = null; if (!rebindSuccess && rebinder != null) { rebinder.RevertMapBeingRebound(); } rebinder = null; gameObject.SetActive(false); rebindCompleteEvent.Fire(); if (ChartEditor.Instance) { ChartEditor.Instance.uiServices.SetPopupBlockingEnabled(false); } Localiser.LocaliseScene(); }
// Update is called once per frame void Update() { if (MSChartEditorInput.GetInputDown(MSChartEditorInputActions.CloseMenu)) { Close(false); } else { InputAction conflict; IInputMap attemptedInput; if (!device.Connected || rebinder.TryMap(out conflict, out attemptedInput)) { Close(true); } else if (conflict != null) { inputConflictEvent.Fire(conflict); conflictNotificationText.text = string.Format(conflictFormatStr, attemptedInput.GetInputStr(), conflict.properties.displayName); conflictNotificationText.enabled = true; } } }