Ejemplo n.º 1
0
        public static List <DeviceInput> GetApplicableMaps(CommonGamepadInputs t, string[] connectedGamepads)
        {
            //builds input mapping of type t for all known connected gamepads


            List <DeviceInput> applicableInputs = new List <DeviceInput>();


            for (int i = 0; i < commonMappings.Count; i++)
            {
                //add any applicable button mappings
                for (int k = 0; k < commonMappings[i].buttons.Count; k++)
                {
                    if (commonMappings[i].buttons[k].buttonType == t)
                    {
                        //add this button input
                        DeviceInput newInput = new DeviceInput(InputDeviceType.GamepadButton);
                        newInput.gamepadButtonNumber = commonMappings[i].buttons[k].buttonNumber;
                        newInput.commonMappingType   = t;
                        newInput.displayName         = commonMappings[i].buttons[k].displayName;

                        newInput.allowedSlots = mappingSlots[i].slots.ToArray();

                        applicableInputs.Add(newInput);
                    }
                }
                //add any applicable axis bingings
                for (int k = 0; k < commonMappings[i].axis.Count; k++)
                {
                    if (commonMappings[i].axis[k].buttonType == t)
                    {
                        //add this axis input
                        DeviceInput newInput = new DeviceInput(InputDeviceType.GamepadAxis);
                        newInput.gamepadAxisNumber    = commonMappings[i].axis[k].axisNumber;
                        newInput.commonMappingType    = t;
                        newInput.displayName          = commonMappings[i].axis[k].displayName;
                        newInput.invertAxis           = commonMappings[i].axis[k].invert;
                        newInput.clampAxis            = commonMappings[i].axis[k].clamp;
                        newInput.axisButtoncompareVal = commonMappings[i].axis[k].compareVal;
                        newInput.defaultAxisValue     = commonMappings[i].axis[k].defaultVal;

                        newInput.allowedSlots = mappingSlots[i].slots.ToArray();

                        if (commonMappings[i].axis[k].rescaleAxis)
                        {
                            newInput.rescaleAxis    = true;
                            newInput.rescaleAxisMin = commonMappings[i].axis[k].rescaleAxisMin;
                            newInput.rescaleAxisMax = commonMappings[i].axis[k].rescaleAxisMax;
                        }

                        applicableInputs.Add(newInput);
                    }
                }
            }



            return(applicableInputs);
        }
Ejemplo n.º 2
0
        private void AddGamepadInput(CommonGamepadInputs gamepadButtonOrAxis, bool isNewBinding)
        {
            Sinput.CheckGamepads();

            if (isNewBinding)
            {
                commonMappings.Add(gamepadButtonOrAxis);
            }
            List <DeviceInput> applicableMapInputs = CommonGamepadMappings.GetApplicableMaps(gamepadButtonOrAxis, CommonXRInputs.NOBUTTON, Sinput.gamepads);

            for (int i = 0; i < applicableMapInputs.Count; i++)
            {
                applicableMapInputs[i].commonXRMappingType = CommonXRInputs.NOBUTTON;
            }

            AddGamepadInputs(applicableMapInputs);
        }
Ejemplo n.º 3
0
 public void AddGamepadInput(CommonGamepadInputs gamepadButtonOrAxis)
 {
     AddGamepadInput(gamepadButtonOrAxis, true);
 }
Ejemplo n.º 4
0
        /*public static List<DeviceInput> GetApplicableMaps(CommonXRInputs t, string[] connectedGamepads) {
         *      Debug.LogError("DO THISSSSS");
         *      return new List<DeviceInput>();
         * }*/
        public static List <DeviceInput> GetApplicableMaps(CommonGamepadInputs commonInputType, CommonXRInputs commonXRInputType, string[] connectedGamepads)
        {
            //builds input mapping of type t for all known connected gamepads


            List <DeviceInput> applicableInputs = new List <DeviceInput>();

            bool addthis = false;

            for (int i = 0; i < commonMappings.Count; i++)
            {
                //if (commonMappings[i].isXRdevice) Debug.Log("Found XR device");

                //add any applicable button mappings
                for (int k = 0; k < commonMappings[i].buttons.Count; k++)
                {
                    addthis = false;
                    if (!commonMappings[i].isXRdevice && commonMappings[i].buttons[k].buttonType != CommonGamepadInputs.NOBUTTON)
                    {
                        if (commonMappings[i].buttons[k].buttonType == commonInputType)
                        {
                            addthis = true;
                        }
                    }
                    if (commonMappings[i].isXRdevice && commonMappings[i].buttons[k].vrButtonType != CommonXRInputs.NOBUTTON)
                    {
                        //Debug.Log("Adding XR button from common mapping");
                        if (commonMappings[i].buttons[k].vrButtonType == commonXRInputType)
                        {
                            addthis = true;
                        }
                    }
                    if (addthis)
                    {
                        //add this button input
                        DeviceInput newInput = new DeviceInput(InputDeviceType.GamepadButton);
                        newInput.gamepadButtonNumber = commonMappings[i].buttons[k].buttonNumber;
                        newInput.commonMappingType   = commonInputType;
                        newInput.displayName         = commonMappings[i].buttons[k].displayName;

                        newInput.allowedSlots = mappingSlots[i].slots.ToArray();

                        applicableInputs.Add(newInput);
                    }
                }
                //add any applicable axis bingings
                for (int k = 0; k < commonMappings[i].axis.Count; k++)
                {
                    addthis = false;
                    if (!commonMappings[i].isXRdevice && commonMappings[i].axis[k].buttonType != CommonGamepadInputs.NOBUTTON)
                    {
                        if (commonMappings[i].axis[k].buttonType == commonInputType)
                        {
                            addthis = true;
                        }
                    }
                    if (commonMappings[i].isXRdevice && commonMappings[i].axis[k].vrButtonType != CommonXRInputs.NOBUTTON)
                    {
                        //Debug.Log("Adding XR Axis from common mapping");
                        if (commonMappings[i].axis[k].vrButtonType == commonXRInputType)
                        {
                            addthis = true;
                        }
                    }
                    if (addthis)
                    {
                        //add this axis input
                        DeviceInput newInput = new DeviceInput(InputDeviceType.GamepadAxis);
                        newInput.gamepadAxisNumber    = commonMappings[i].axis[k].axisNumber;
                        newInput.commonMappingType    = commonInputType;
                        newInput.displayName          = commonMappings[i].axis[k].displayName;
                        newInput.invertAxis           = commonMappings[i].axis[k].invert;
                        newInput.clampAxis            = commonMappings[i].axis[k].clamp;
                        newInput.axisButtoncompareVal = commonMappings[i].axis[k].compareVal;
                        newInput.defaultAxisValue     = commonMappings[i].axis[k].defaultVal;

                        newInput.allowedSlots = mappingSlots[i].slots.ToArray();

                        if (commonMappings[i].axis[k].rescaleAxis)
                        {
                            newInput.rescaleAxis    = true;
                            newInput.rescaleAxisMin = commonMappings[i].axis[k].rescaleAxisMin;
                            newInput.rescaleAxisMax = commonMappings[i].axis[k].rescaleAxisMax;
                        }

                        applicableInputs.Add(newInput);
                    }
                }
            }



            return(applicableInputs);
        }
    public override void OnInspectorGUI()
    {
        ControlScheme controlScheme = (ControlScheme)target;

        EditorGUI.BeginChangeCheck();

        if (null == guiBGStyleeee)
        {
            guiBGStyleeee = new GUIStyle();
            guiBGStyleeee.normal.background = MakeTex(1, 1, new Color(0.0f, 0.0f, 0.0f, 0.07f));
        }
        //if (null == guiStyle) {
        //	guiBGStyle = new GUIStyle();
        //}

        string[] strs = new string[] { "Controls", "Smart Controls" };        //,"Settings"};
        currentPanel = GUILayout.Toolbar(currentPanel, strs);
        EditorGUILayout.Space();
        EditorGUILayout.LabelField("", GUI.skin.horizontalSlider);

        if (currentPanel == 0)
        {
            //show controls list

            if (controlFoldoutAnims.Count != controlScheme.controls.Count)
            {
                //controlFoldouts = new List<bool>();
                controlFoldoutAnims = new List <UnityEditor.AnimatedValues.AnimBool>();
                for (int i = 0; i < controlScheme.controls.Count; i++)
                {
                    //controlFoldouts.Add(false);
                    controlFoldoutAnims.Add(new UnityEditor.AnimatedValues.AnimBool(false));
                    controlFoldoutAnims[controlFoldoutAnims.Count - 1].valueChanged.AddListener(Repaint);
                }
            }

            ControlScheme.ControlSetup activeControl = new ControlScheme.ControlSetup();
            for (int i = 0; i < controlScheme.controls.Count; i++)
            {
                bool deleteControl = false;
                bool moveUp        = false;
                bool moveDown      = false;

                EditorGUILayout.BeginHorizontal();
                controlFoldoutAnims[i].target = EditorGUILayout.Foldout(controlFoldoutAnims[i].target, controlScheme.controls[i].name, true);
                //EditorGUILayout.BeginHorizontal(GUILayout.Width(90));
                if (GUILayout.Button("↑", EditorStyles.miniButton, GUILayout.Width(20)))
                {
                    moveUp = true;
                }
                if (GUILayout.Button("↓", EditorStyles.miniButton, GUILayout.Width(20)))
                {
                    moveDown = true;
                }
                if (GUILayout.Button("X", EditorStyles.miniButton, GUILayout.Width(30)))
                {
                    deleteControl = true;
                }
                //EditorGUILayout.EndHorizontal();
                EditorGUILayout.EndHorizontal();


                if (EditorGUILayout.BeginFadeGroup(controlFoldoutAnims[i].faded))
                {
                    EditorGUILayout.BeginVertical(guiBGStyleeee);
                    EditorGUILayout.Space();
                    //guiCol = GUI.backgroundColor;
                    //GUI.backgroundColor = Color.black;

                    //if (controlFoldouts[i]){
                    activeControl = controlScheme.controls[i];

                    //EditorGUILayout.BeginHorizontal();


                    activeControlName  = activeControl.name;
                    activeControl.name = EditorGUILayout.TextField("Control Name", activeControl.name);
                    if (activeControlName != activeControl.name)
                    {
                        //control name changed, lets apply this change to any smart controls that reference this control
                        for (int k = 0; k < controlScheme.smartControls.Count; k++)
                        {
                            if (controlScheme.smartControls[k].positiveControl == activeControlName)
                            {
                                ControlScheme.SmartControlSetup activeSmartControl = controlScheme.smartControls[k];
                                activeSmartControl.positiveControl = activeControl.name;
                                controlScheme.smartControls[k]     = activeSmartControl;
                            }
                            if (controlScheme.smartControls[k].negativeControl == activeControlName)
                            {
                                ControlScheme.SmartControlSetup activeSmartControl = controlScheme.smartControls[k];
                                activeSmartControl.negativeControl = activeControl.name;
                                controlScheme.smartControls[k]     = activeSmartControl;
                            }
                        }
                    }
                    //if (GUILayout.Button("↑", EditorStyles.miniButton)) moveUp = true;
                    //if (GUILayout.Button("↓", EditorStyles.miniButton)) moveDown = true;
                    //if (GUILayout.Button("X", EditorStyles.miniButton)) deleteControl = true;
                    //EditorGUILayout.EndHorizontal();

                    EditorGUILayout.Space();

                    //keyboard inputs
                    EditorGUILayout.BeginHorizontal();
                    EditorGUILayout.BeginVertical();
                    //column a
                    EditorGUILayout.LabelField("Keyboard Inputs:");

                    EditorGUILayout.EndVertical();
                    EditorGUILayout.BeginVertical();
                    //column b
                    for (int k = 0; k < activeControl.keyboardInputs.Count; k++)
                    {
                        EditorGUILayout.BeginHorizontal();

                        activeControl.keyboardInputs[k] = (KeyboardInputType)EditorGUILayout.EnumPopup(activeControl.keyboardInputs[k]);
                        if (GUILayout.Button("x", EditorStyles.miniButton))
                        {
                            activeControl.keyboardInputs.RemoveAt(k);
                            k--;
                        }
                        EditorGUILayout.EndHorizontal();
                    }
                    EditorGUILayout.BeginHorizontal();
                    if (GUILayout.Button("+", GUILayout.Width(40)))
                    {
                        KeyboardInputType newKeycode = KeyboardInputType.None;
                        activeControl.keyboardInputs.Add(newKeycode);
                    }
                    GUILayout.FlexibleSpace();
                    EditorGUILayout.EndHorizontal();

                    EditorGUILayout.EndVertical();
                    EditorGUILayout.EndHorizontal();

                    EditorGUILayout.Space();


                    //gamepad inputs
                    EditorGUILayout.BeginHorizontal();
                    EditorGUILayout.BeginVertical();
                    //column a
                    EditorGUILayout.LabelField("Gamepad Inputs:");

                    EditorGUILayout.EndVertical();
                    EditorGUILayout.BeginVertical();
                    //column b
                    for (int k = 0; k < activeControl.gamepadInputs.Count; k++)
                    {
                        EditorGUILayout.BeginHorizontal();

                        activeControl.gamepadInputs[k] = (CommonGamepadInputs)EditorGUILayout.EnumPopup(activeControl.gamepadInputs[k]);
                        if (GUILayout.Button("x", EditorStyles.miniButton))
                        {
                            activeControl.gamepadInputs.RemoveAt(k);
                            k--;
                        }
                        EditorGUILayout.EndHorizontal();
                    }
                    EditorGUILayout.BeginHorizontal();
                    if (GUILayout.Button("+", GUILayout.Width(40)))
                    {
                        CommonGamepadInputs newGamepadInput = CommonGamepadInputs.NOBUTTON;
                        activeControl.gamepadInputs.Add(newGamepadInput);
                    }
                    GUILayout.FlexibleSpace();
                    EditorGUILayout.EndHorizontal();

                    EditorGUILayout.EndVertical();
                    EditorGUILayout.EndHorizontal();

                    EditorGUILayout.Space();


                    //mouse inputs
                    EditorGUILayout.BeginHorizontal();
                    EditorGUILayout.BeginVertical();
                    //column a
                    EditorGUILayout.LabelField("Mouse Inputs:");

                    EditorGUILayout.EndVertical();
                    EditorGUILayout.BeginVertical();
                    //column b
                    for (int k = 0; k < activeControl.mouseInputs.Count; k++)
                    {
                        EditorGUILayout.BeginHorizontal();

                        activeControl.mouseInputs[k] = (MouseInputType)EditorGUILayout.EnumPopup(activeControl.mouseInputs[k]);
                        if (GUILayout.Button("x", EditorStyles.miniButton))
                        {
                            activeControl.mouseInputs.RemoveAt(k);
                            k--;
                        }
                        EditorGUILayout.EndHorizontal();
                    }
                    EditorGUILayout.BeginHorizontal();
                    if (GUILayout.Button("+", GUILayout.Width(40)))
                    {
                        activeControl.mouseInputs.Add(MouseInputType.Mouse0);
                    }
                    GUILayout.FlexibleSpace();
                    EditorGUILayout.EndHorizontal();


                    EditorGUILayout.EndVertical();
                    EditorGUILayout.EndHorizontal();

                    EditorGUILayout.Space();

                    //virtual inputs
                    EditorGUILayout.BeginHorizontal();
                    EditorGUILayout.BeginVertical();
                    //column a
                    EditorGUILayout.LabelField("Virtual Inputs:");

                    EditorGUILayout.EndVertical();
                    EditorGUILayout.BeginVertical();
                    //column b
                    for (int k = 0; k < activeControl.virtualInputs.Count; k++)
                    {
                        EditorGUILayout.BeginHorizontal();
                        activeControl.virtualInputs[k] = EditorGUILayout.TextField(activeControl.virtualInputs[k]);
                        if (GUILayout.Button("x", EditorStyles.miniButton))
                        {
                            activeControl.virtualInputs.RemoveAt(k);
                            k--;
                        }
                        EditorGUILayout.EndHorizontal();
                    }

                    EditorGUILayout.BeginHorizontal();
                    if (GUILayout.Button("+", GUILayout.Width(40)))
                    {
                        activeControl.virtualInputs.Add("");
                    }
                    GUILayout.FlexibleSpace();
                    EditorGUILayout.EndHorizontal();

                    EditorGUILayout.EndVertical();
                    EditorGUILayout.EndHorizontal();


                    controlScheme.controls[i] = activeControl;

                    EditorGUILayout.Space();
                    //EditorGUILayout.Space();
                    //EditorGUILayout.LabelField("", GUI.skin.horizontalSlider);

                    EditorGUILayout.EndVertical();
                }
                EditorGUILayout.EndFadeGroup();

                if (moveUp && i > 0)
                {
                    controlScheme.controls.Insert(i - 1, controlScheme.controls[i]);
                    controlScheme.controls.RemoveAt(i + 1);

                    controlFoldoutAnims.Insert(i - 1, controlFoldoutAnims[i]);
                    controlFoldoutAnims.RemoveAt(i + 1);
                }
                if (moveDown && i < controlScheme.controls.Count - 1)
                {
                    controlScheme.controls.Insert(i + 2, controlScheme.controls[i]);
                    controlScheme.controls.RemoveAt(i);

                    controlFoldoutAnims.Insert(i + 2, controlFoldoutAnims[i]);
                    controlFoldoutAnims.RemoveAt(i);
                }

                if (deleteControl)
                {
                    controlScheme.controls.RemoveAt(i);
                    //controlFoldouts.RemoveAt(i);
                    controlFoldoutAnims.RemoveAt(i);
                    //controlKeyboardInputNames.RemoveAt(i);
                    i--;
                }
            }
            if (GUILayout.Button("+"))
            {
                ControlScheme.ControlSetup newControl = new ControlScheme.ControlSetup();
                newControl.name           = "New Control";
                newControl.keyboardInputs = new List <KeyboardInputType>();
                newControl.gamepadInputs  = new List <CommonGamepadInputs>();
                newControl.mouseInputs    = new List <MouseInputType>();
                newControl.virtualInputs  = new List <string>();
                controlScheme.controls.Add(newControl);
                //controlFoldouts.Add(true);
                controlFoldoutAnims.Add(new UnityEditor.AnimatedValues.AnimBool(false));
                controlFoldoutAnims[controlFoldoutAnims.Count - 1].target = true;
                controlFoldoutAnims[controlFoldoutAnims.Count - 1].valueChanged.AddListener(Repaint);
                //controlKeyboardInputNames.Add("");
                controlNamesChanged = true;
            }
            controlNamesChanged = true;
        }

        if (currentPanel == 1)
        {
            //show smart controls list
            if (smartControlFoldouts.Count != controlScheme.smartControls.Count)
            {
                smartControlFoldouts = new List <UnityEditor.AnimatedValues.AnimBool>();
                for (int i = 0; i < controlScheme.smartControls.Count; i++)
                {
                    smartControlFoldouts.Add(new UnityEditor.AnimatedValues.AnimBool(false));
                    smartControlFoldouts[smartControlFoldouts.Count - 1].valueChanged.AddListener(Repaint);
                }
            }


            if (controlNames == null || controlNamesChanged)
            {
                controlNamesChanged = true;

                List <string> controlNamesList = new List <string>();
                controlNamesList.Add("");
                for (int i = 0; i < controlScheme.controls.Count; i++)
                {
                    controlNamesList.Add(controlScheme.controls[i].name);
                }
                controlNames = controlNamesList.ToArray();
            }

            if (positiveControlIndices.Count != controlScheme.smartControls.Count || negativeControlIndices.Count != controlScheme.smartControls.Count || controlNamesChanged)
            {
                positiveControlIndices = new List <int>();
                negativeControlIndices = new List <int>();
                for (int i = 0; i < controlScheme.smartControls.Count; i++)
                {
                    positiveControlIndices.Add(GetControlIndex(controlScheme.smartControls[i].positiveControl));
                    negativeControlIndices.Add(GetControlIndex(controlScheme.smartControls[i].negativeControl));
                }
            }

            controlNamesChanged = false;

            int controlIndex = 0;

            ControlScheme.SmartControlSetup activeSmartControl = new ControlScheme.SmartControlSetup();
            for (int i = 0; i < controlScheme.smartControls.Count; i++)
            {
                EditorGUILayout.BeginHorizontal();
                smartControlFoldouts[i].target = EditorGUILayout.Foldout(smartControlFoldouts[i].target, controlScheme.smartControls[i].name, true);

                //EditorGUILayout.LabelField("");
                bool deleteControl = false;
                bool moveUp        = false;
                bool moveDown      = false;

                //EditorGUILayout.BeginHorizontal(GUILayout.Width(90));
                if (GUILayout.Button("↑", EditorStyles.miniButton, GUILayout.Width(20)))
                {
                    moveUp = true;
                }
                if (GUILayout.Button("↓", EditorStyles.miniButton, GUILayout.Width(20)))
                {
                    moveDown = true;
                }
                if (GUILayout.Button("X", EditorStyles.miniButton, GUILayout.Width(30)))
                {
                    deleteControl = true;
                }
                //EditorGUILayout.EndHorizontal();
                //if (GUILayout.Button("X")) deleteControl = true;
                EditorGUILayout.EndHorizontal();

                activeSmartControl = controlScheme.smartControls[i];

                if (EditorGUILayout.BeginFadeGroup(smartControlFoldouts[i].faded))
                {
                    //if (smartControlFoldouts[i]){
                    activeSmartControl.name = EditorGUILayout.TextField("Name", activeSmartControl.name);

                    EditorGUILayout.BeginHorizontal();
                    EditorGUILayout.PrefixLabel("Positive Control");
                    controlIndex = EditorGUILayout.Popup(positiveControlIndices[i], controlNames);
                    if (controlIndex != positiveControlIndices[i])
                    {
                        positiveControlIndices[i]          = controlIndex;
                        activeSmartControl.positiveControl = controlNames[positiveControlIndices[i]];
                    }
                    EditorGUILayout.EndHorizontal();
                    //activeSmartControl.positiveControl = EditorGUILayout.TextField("Positive Control", activeSmartControl.positiveControl);

                    EditorGUILayout.BeginHorizontal();
                    EditorGUILayout.PrefixLabel("Negative Control");
                    controlIndex = EditorGUILayout.Popup(negativeControlIndices[i], controlNames);
                    if (controlIndex != negativeControlIndices[i])
                    {
                        negativeControlIndices[i]          = controlIndex;
                        activeSmartControl.negativeControl = controlNames[negativeControlIndices[i]];
                    }
                    EditorGUILayout.EndHorizontal();
                    //activeSmartControl.negativeControl = EditorGUILayout.TextField("Negative Control", activeSmartControl.negativeControl);

                    activeSmartControl.deadzone = EditorGUILayout.FloatField("Deadzone", activeSmartControl.deadzone);
                    activeSmartControl.deadzone = Mathf.Clamp(activeSmartControl.deadzone, 0f, 1f);

                    activeSmartControl.gravity = EditorGUILayout.FloatField("Gravity", activeSmartControl.gravity);
                    activeSmartControl.gravity = Mathf.Clamp(activeSmartControl.gravity, 0f, float.MaxValue);

                    activeSmartControl.speed = EditorGUILayout.FloatField("Speed", activeSmartControl.speed);
                    activeSmartControl.speed = Mathf.Clamp(activeSmartControl.speed, 0f, float.MaxValue);

                    activeSmartControl.snap   = EditorGUILayout.Toggle("Snap", activeSmartControl.snap);
                    activeSmartControl.scale  = EditorGUILayout.FloatField("Scale", activeSmartControl.scale);
                    activeSmartControl.invert = EditorGUILayout.Toggle("Invert", activeSmartControl.invert);
                    EditorGUILayout.Space();
                }
                EditorGUILayout.EndFadeGroup();

                controlScheme.smartControls[i] = activeSmartControl;
                if (deleteControl)
                {
                    controlScheme.smartControls.RemoveAt(i);
                    smartControlFoldouts.RemoveAt(i);
                    positiveControlIndices.RemoveAt(i);
                    negativeControlIndices.RemoveAt(i);
                    i--;
                }

                if (moveUp && i > 0)
                {
                    controlScheme.smartControls.Insert(i - 1, controlScheme.smartControls[i]);
                    controlScheme.smartControls.RemoveAt(i + 1);

                    smartControlFoldouts.Insert(i - 1, smartControlFoldouts[i]);
                    smartControlFoldouts.RemoveAt(i + 1);

                    positiveControlIndices.Insert(i - 1, positiveControlIndices[i]);
                    positiveControlIndices.RemoveAt(i + 1);

                    negativeControlIndices.Insert(i - 1, negativeControlIndices[i]);
                    negativeControlIndices.RemoveAt(i + 1);
                }
                if (moveDown && i < controlScheme.smartControls.Count - 1)
                {
                    controlScheme.smartControls.Insert(i + 2, controlScheme.smartControls[i]);
                    controlScheme.smartControls.RemoveAt(i);

                    smartControlFoldouts.Insert(i + 2, smartControlFoldouts[i]);
                    smartControlFoldouts.RemoveAt(i);

                    positiveControlIndices.Insert(i + 2, positiveControlIndices[i]);
                    positiveControlIndices.RemoveAt(i);

                    negativeControlIndices.Insert(i + 2, negativeControlIndices[i]);
                    negativeControlIndices.RemoveAt(i);
                }
            }


            if (GUILayout.Button("+"))
            {
                ControlScheme.SmartControlSetup newSmartControl = new ControlScheme.SmartControlSetup();
                newSmartControl.name            = "New Control";
                newSmartControl.positiveControl = "";
                newSmartControl.negativeControl = "";

                newSmartControl.deadzone = 0.001f;
                newSmartControl.gravity  = 3f;
                newSmartControl.speed    = 3f;
                newSmartControl.snap     = false;
                newSmartControl.scale    = 1f;

                controlScheme.smartControls.Add(newSmartControl);
                smartControlFoldouts.Add(new UnityEditor.AnimatedValues.AnimBool(false));
                smartControlFoldouts[smartControlFoldouts.Count - 1].target = true;
                smartControlFoldouts[smartControlFoldouts.Count - 1].valueChanged.AddListener(Repaint);

                positiveControlIndices.Add(0);
                negativeControlIndices.Add(0);
            }
        }

        /*if (currentPanel == 2) {
         *      //settings panel
         *      controlScheme.name = EditorGUILayout.TextField("Control Scheme Name", controlScheme.name);
         *      controlScheme.exposeMouseSensitivityOption = EditorGUILayout.Toggle("Expose mouse sensitivity on rebind screen", controlScheme.exposeMouseSensitivityOption);
         *      controlScheme.mouseAndKeyboardAreDistinct = EditorGUILayout.Toggle("Mouse & Keyboard are distinct", controlScheme.mouseAndKeyboardAreDistinct);
         * }*/

        if (EditorGUI.EndChangeCheck())
        {
            //something was changed
            EditorUtility.SetDirty(controlScheme);
        }

        //if there are any foldouts/fades still animating, repaint
        bool repaint = false;

        for (int i = 0; i < controlFoldoutAnims.Count; i++)
        {
            if (controlFoldoutAnims[i].isAnimating)
            {
                repaint = true;
            }
        }
        for (int i = 0; i < smartControlFoldouts.Count; i++)
        {
            if (smartControlFoldouts[i].isAnimating)
            {
                repaint = true;
            }
        }
        if (repaint)
        {
            Repaint();
        }
    }
Ejemplo n.º 6
0
        private void AddGamepadInput(CommonGamepadInputs gamepadButtonOrAxis, bool isNewBinding)
        {
            Sinput.CheckGamepads();

            if (isNewBinding)
            {
                commonMappings.Add(gamepadButtonOrAxis);
            }
            List <DeviceInput> applicableMapInputs = CommonGamepadMappings.GetApplicableMaps(gamepadButtonOrAxis, Sinput.gamepads);

            string[] gamepads = Sinput.gamepads;

            //find which common mapped inputs apply here, but already have custom binding loaded, and disregard those common mappings
            for (int ai = 0; ai < applicableMapInputs.Count; ai++)
            {
                bool samePad = false;
                for (int i = 0; i < inputs.Count; i++)
                {
                    if (inputs[i].inputType == InputDeviceType.GamepadAxis || inputs[i].inputType == InputDeviceType.GamepadButton)
                    {
                        if (inputs[i].isCustom)
                        {
                            for (int ais = 0; ais < applicableMapInputs[ai].allowedSlots.Length; ais++)
                            {
                                for (int toomanyints = 0; toomanyints < inputs[i].allowedSlots.Length; toomanyints++)
                                {
                                    if (applicableMapInputs[ai].allowedSlots[ais] == inputs[i].allowedSlots[toomanyints])
                                    {
                                        samePad = true;
                                    }
                                }
                                if (gamepads[applicableMapInputs[ai].allowedSlots[ais]] == inputs[i].deviceName.ToUpper())
                                {
                                    samePad = true;
                                }
                            }
                            if (samePad)
                            {
                                //if I wanna be copying input display names, here's the place to do it
                                //TODO: decide if I wanna do this
                                //pro: it's good if the common mapping is accurate but the user wants to rebind
                                //con: it's bad if the common mapping is bad or has a generic gamepad name and so it mislables different inputs
                                //maybe I should do this, but with an additional check so it's not gonna happen with say, a device labelled "wireless controller"?
                            }
                        }
                    }
                }
                if (samePad)
                {
                    //we already have a custom bound control for this input, we don't need more
                    applicableMapInputs.RemoveAt(ai);
                    ai--;
                }
            }

            //add whichever common mappings still apply
            for (int i = 0; i < applicableMapInputs.Count; i++)
            {
                inputs.Add(applicableMapInputs[i]);
            }
        }