public void ActivateController(InputWrapper wrapper, int controllerIndex, IController.ButtonPressedCallback pressedCallback, IController.ButtonReleasedCallback releasedCallback) { foreach (var config in controllers) { if (config.wrapper == wrapper && config.controllerIndex == controllerIndex) { config.isEnabled = true; return; } } var controller = new ControllerConfiguration(); controller.wrapper = wrapper; controller.controllerIndex = controllerIndex; if (Utility.CheckXInputSupport() && wrapper == InputWrapper.XInput) { #if !LINUX controller.iface = new XInputController(controller.controllerIndex); #endif } else if (Utility.CheckSDLSupport() && wrapper == InputWrapper.SDL) { controller.iface = new SDLController(controller.controllerIndex); } /*else if (Utility.CheckSharpDXSupport() && wrapper == InputWrapper.DirectInput) * { #if !LINUX * controller.iface = new DirectXController(controller.controllerIndex); #endif * }*/ else if (wrapper == InputWrapper.KeyboardMouse) { controller.iface = new KeyboardMouseController(); } else { // invalid configuration, bail out.. return; } controller.SetManualDeadZones(controller.manualDeadZones); controller.iface.analogEvaluationCurve = CurveFactory.Instantiate(controller.analogInputCurve); controller.iface.buttonPressedCallback = pressedCallback; controller.iface.buttonReleasedCallback = releasedCallback; controller.presets = DefaultControllerPresets.GetDefaultPresets(controller.iface); controller.currentPreset = 0; controllers.Add(controller); ScreenMessages.PostScreenMessage("CONTROLLER: " + controller.iface.GetControllerName(), 1.0f, ScreenMessageStyle.UPPER_CENTER); }
public void DoWindow(int window) { GUI.DragWindow(new Rect(0, 0, 10000, 20)); GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); if (GUILayout.Button("X", GUILayout.Height(16)) || m_Controller == null || m_Controller.iface == null) { shouldBeDestroyed = true; if (m_Controller != null) { m_Controller.controllerConfigurationOpen = false; AdvancedFlyByWire.Instance.SaveState(null); } return; } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Show additional options"); m_ShowOptions = GUILayout.Toggle(m_ShowOptions, ""); GUILayout.EndHorizontal(); if (m_ShowOptions) { GUILayout.BeginHorizontal(); GUILayout.Label("Discrete action step"); GUILayout.FlexibleSpace(); FloatField(m_Controller.discreteActionStep, out m_Controller.discreteActionStep); GUILayout.EndHorizontal(); GUILayout.Space(8); GUILayout.BeginHorizontal(); GUILayout.Label("Incremental action sensitivity"); GUILayout.FlexibleSpace(); FloatField(m_Controller.incrementalActionSensitivity, out m_Controller.incrementalActionSensitivity); GUILayout.EndHorizontal(); GUILayout.Space(8); GUILayout.BeginHorizontal(); GUILayout.Label("Camera sensitivity"); GUILayout.FlexibleSpace(); FloatField(m_Controller.cameraSensitivity, out m_Controller.cameraSensitivity); GUILayout.EndHorizontal(); GUILayout.Space(8); GUILayout.BeginHorizontal(); GUILayout.Label("Analog input curve"); GUILayout.FlexibleSpace(); string curveLabel = "Quadratic"; if (m_Controller.analogInputCurve == CurveType.Identity) { curveLabel = "Linear"; } else if (m_Controller.analogInputCurve == CurveType.SqrtX) { curveLabel = "Quadratic (Inverted)"; } if (GUILayout.Button(curveLabel)) { if (m_Controller.analogInputCurve == CurveType.Identity) { m_Controller.SetAnalogInputCurveType(CurveType.XSquared); } else if (m_Controller.analogInputCurve == CurveType.XSquared) { m_Controller.SetAnalogInputCurveType(CurveType.SqrtX); } else { m_Controller.SetAnalogInputCurveType(CurveType.Identity); } } GUILayout.EndHorizontal(); GUILayout.Space(8); GUILayout.BeginHorizontal(); GUILayout.Label("Treat hats as buttons (requires restart)"); GUILayout.FlexibleSpace(); var state = GUILayout.Toggle(m_Controller.treatHatsAsButtons, ""); if (state != m_Controller.treatHatsAsButtons) { m_Controller.treatHatsAsButtons = state; AdvancedFlyByWire.Instance.SaveState(null); } GUILayout.EndHorizontal(); GUILayout.Space(8); GUILayout.BeginHorizontal(); GUILayout.Label("Manual dead-zones"); GUILayout.FlexibleSpace(); state = GUILayout.Toggle(m_Controller.manualDeadZones, ""); if (state != m_Controller.manualDeadZones) { m_Controller.SetManualDeadZones(state); AdvancedFlyByWire.Instance.SaveState(null); } GUILayout.EndHorizontal(); } GUILayout.Label("If some axes below are not displaying 0.0 when the controller is left untouched then it needs calibration."); GUILayout.Label("Leave the controller and press calibrate, then move around all the axes"); GUILayout.BeginHorizontal(); if (GUILayout.Button("Calibrate")) { m_Controller.SetManualDeadZones(false); for (int i = 0; i < m_Controller.iface.GetAxesCount(); i++) { float value = m_Controller.iface.GetRawAxisState(i); m_Controller.iface.axisStates[i].m_Left = value - 1e-4f; m_Controller.iface.axisStates[i].m_Identity = value; m_Controller.iface.axisStates[i].m_Right = value + 1e-4f; m_Controller.iface.axisStates[i].m_NegativeDeadZone = float.MaxValue; m_Controller.iface.axisStates[i].m_PositiveDeadZone = float.MaxValue; } } GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); m_ScrollPosition = GUILayout.BeginScrollView(m_ScrollPosition); GUILayout.Label("Axes"); for (int i = 0; i < m_Controller.iface.GetAxesCount(); i++) { GUILayout.BeginHorizontal(); string label = ""; float value = m_Controller.iface.GetAxisState(i); label += m_Controller.iface.GetAxisName(i) + " "; GUILayout.Label(label); GUILayout.FlexibleSpace(); label = value.ToString("0.000"); if (value >= 0.0f) { label += " "; } GUILayout.Label(label); GUI.enabled = false; GUILayout.HorizontalSlider(value, -1.0f, 1.0f, GUILayout.Width(150)); GUI.enabled = true; GUILayout.EndHorizontal(); if (m_ShowOptions || m_Controller.manualDeadZones) { if (!m_Controller.manualDeadZones) { GUI.enabled = false; } GUILayout.BeginHorizontal(); GUILayout.Label("Negative dead-zone"); GUILayout.FlexibleSpace(); var negativeDeadZone = Mathf.Clamp(m_Controller.iface.axisStates[i].m_NegativeDeadZone, 0.0f, 1.0f); var positiveDeadZone = Mathf.Clamp(m_Controller.iface.axisStates[i].m_PositiveDeadZone, 0.0f, 1.0f); GUILayout.Label(negativeDeadZone.ToString("0.000")); m_Controller.iface.axisStates[i].m_NegativeDeadZone = GUILayout.HorizontalSlider(negativeDeadZone, 0.0f, 1.0f, GUILayout.Width(150)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Positive dead-zone"); GUILayout.FlexibleSpace(); GUILayout.Label(positiveDeadZone.ToString("0.000")); m_Controller.iface.axisStates[i].m_PositiveDeadZone = GUILayout.HorizontalSlider(positiveDeadZone, 0.0f, 1.0f, GUILayout.Width(150)); GUILayout.EndHorizontal(); GUILayout.Space(32); GUI.enabled = true; } } GUILayout.Label("Buttons"); for (int i = 0; i < m_Controller.iface.GetButtonsCount(); i++) { GUILayout.Label(m_Controller.iface.GetButtonName(i) + ": " + m_Controller.iface.GetButtonState(i).ToString()); } GUILayout.EndScrollView(); }