Пример #1
0
            // ------------------
            static private void AddAnalogBindingAxisSubMenu(GenericMenu menu, string axis, BindingDescription desc, System.Action onRefreshCallback)
            {
                AxisBinding bind = (AxisBinding)desc.binding;

                string menuPath = desc.menuPath + desc.nameFormatted + "/";

                for (int i = -1; i < bind.targetList.Count; ++i)
                {
                    string menuItemPath = "";

                    AxisBinding.TargetElem axisElem = bind.GetTarget(i);

                    if (i < 0)
                    {
                        menuItemPath = menuPath + "Add as new axis target/";
                    }
                    else
                    {
                        if (axisElem.separateAxes)
                        {
                            menuItemPath = menuPath + "Replace separated(+,-) " +
                                           (string.IsNullOrEmpty(axisElem.positiveAxis) ? "EMPTY" : ("\"" + axisElem.positiveAxis + "\"" +
                                                                                                     (axisElem.positiveAxisAsPositive ? "" : " (as negative)"))) +
                                           " : " +
                                           (string.IsNullOrEmpty(axisElem.negativeAxis) ? "EMPTY" : ("\"" + axisElem.negativeAxis + "\"" +
                                                                                                     (axisElem.negativeAxisAsPositive ? "(as positive)" : ""))) +
                                           " (" + i + ")/";
                        }
                        else
                        {
                            if (string.IsNullOrEmpty(axisElem.singleAxis))
                            {
                                menuItemPath = menuPath + "Replace single EMPTY (" + i + ")/";
                            }
                            else
                            {
                                menuItemPath = menuPath + "Replace single \"" + axisElem.singleAxis + "\"" + (axisElem.reverseSingleAxis ? " (Flipped)" : "") + " (" + i + ")/";
                            }
                        }
                    }

                    for (int targetModeIndex = 0; targetModeIndex < 6; ++targetModeIndex)
                    {
                        UniversalBindingAssignment o = new UniversalBindingAssignment();

                        o.undoLabel         = "Bind " + axis + " axis to " + desc.name;
                        o.undoObject        = desc.undoObject;
                        o.binding           = desc.binding;
                        o.onRefreshCallback = onRefreshCallback;
                        o.analogAxisName    = axis;
                        o.analogElemId      = i;

                        string modeName = "";

                        switch (targetModeIndex)
                        {
                        case 0:
                            modeName         = "Single";
                            o.analogSeparate = false;
                            o.analogFlip     = false;
                            break;

                        case 1:
                            modeName         = "Single (Flipped)";
                            o.analogSeparate = false;
                            o.analogFlip     = true;
                            break;

                        case 2:
                            modeName             = "Separated, Positive Side";
                            o.analogSeparate     = true;
                            o.analogPositiveSide = true;
                            o.analogFlip         = false;
                            break;

                        case 3:
                            modeName             = "Separated, Positive Side (Flipped)";
                            o.analogSeparate     = true;
                            o.analogPositiveSide = true;
                            o.analogFlip         = true;
                            break;

                        case 4:
                            modeName             = "Separated, Negative Side";
                            o.analogSeparate     = true;
                            o.analogPositiveSide = false;
                            o.analogFlip         = false;
                            break;

                        case 5:
                            modeName             = "Separated, Negative Side (Flipped)";
                            o.analogSeparate     = true;
                            o.analogPositiveSide = false;
                            o.analogFlip         = true;
                            break;
                        }


                        menu.AddItem(new GUIContent(menuItemPath + modeName), false, o.Execute);

                        if ((targetModeIndex & 1) == 1)
                        {
                            menu.AddSeparator(menuItemPath);
                        }
                    }


                    if ((i < 0) && (bind.targetList.Count > 0))
                    {
                        menu.AddSeparator(menuPath);
                    }
                }
            }
            // ---------------------
            public void DrawGUI(AxisBinding.TargetElem target, InputRig rig, bool isLast)
            {
                bool   separateAxes      = target.separateAxes;
                string singleAxis        = target.singleAxis;
                bool   reverseSingleAxis = target.reverseSingleAxis;

                string positiveAxis       = target.positiveAxis;
                string negativeAxis       = target.negativeAxis;
                bool   positiveAsPositive = target.positiveAxisAsPositive;
                bool   negativeAsPositive = target.negativeAxisAsPositive;

                if (this.parent.allowAxisSeparation)
                {
                    EditorGUILayout.BeginHorizontal(CFEditorStyles.Inst.transpSunkenBG);
                }
                else
                {
                    EditorGUILayout.BeginHorizontal();
                }

                {
                    if (!this.parent.allowAxisSeparation)
                    {
                        separateAxes = false;
                    }
                    else
                    {
                        EditorGUILayout.BeginVertical(GUILayout.Width(20));

                        GUILayout.Space(separateAxes ? 12 : 3);

                        separateAxes = CFGUI.PushButton(new GUIContent("", CFEditorStyles.Inst.sepAxesOnTex, "Separate axes for positive and negative values."),
                                                        new GUIContent("", CFEditorStyles.Inst.sepAxesOffTex, "Single target axis."), separateAxes, CFEditorStyles.Inst.buttonStyle, //CFEditorStyles.Inst.iconButtonStyle,
                                                        GUILayout.Width(18), GUILayout.Height(18));                                                                                  //.ExpandHeight(true), GUILayout.ExpandWidth(true));


                        EditorGUILayout.EndVertical();
                    }
                }

                {
                    EditorGUILayout.BeginVertical(CFEditorStyles.Inst.transpSunkenBG);


                    if (!separateAxes)
                    {
                        EditorGUILayout.BeginHorizontal();

                        reverseSingleAxis = CFGUI.PushButton(new GUIContent("", CFEditorStyles.Inst.texMinusSign, "Reverse source value."),
                                                             new GUIContent("", CFEditorStyles.Inst.texPlusSign, "Don't reverse source value."), reverseSingleAxis, CFEditorStyles.Inst.iconButtonStyle);

                        singleAxis = this.singleAxisField.Draw("", singleAxis, rig);
                        EditorGUILayout.EndHorizontal();
                    }
                    else
                    {
                        EditorGUILayout.BeginHorizontal();

                        EditorGUILayout.LabelField(new GUIContent("Axis +", "Posiitive value axis"), GUILayout.Width(40));

                        positiveAsPositive = CFGUI.PushButton(new GUIContent("", CFEditorStyles.Inst.texPlusSign, "Send positive values as positive to target axis."),
                                                              new GUIContent("", CFEditorStyles.Inst.texMinusSign, "Send positive values as negative."), positiveAsPositive, CFEditorStyles.Inst.iconButtonStyle);

                        positiveAxis = this.positiveAxisField.Draw("", positiveAxis, rig);
                        EditorGUILayout.EndHorizontal();



                        EditorGUILayout.BeginHorizontal();

                        EditorGUILayout.LabelField(new GUIContent("Axis -", "Negative value axis"), GUILayout.Width(40));

                        negativeAsPositive = CFGUI.PushButton(new GUIContent("", CFEditorStyles.Inst.texPlusSign, "Send negative values as positive to target axis."),
                                                              new GUIContent("", CFEditorStyles.Inst.texMinusSign, "Send negative values as negative."), negativeAsPositive, CFEditorStyles.Inst.iconButtonStyle);
                        //EditorGUILayout.ToggleLeft(new GUIContent("-", "Activate the negative side of the axis."), axisNegSide,

                        negativeAxis = this.negativeAxisField.Draw("", negativeAxis, rig);
                        EditorGUILayout.EndHorizontal();
                    }


                    EditorGUILayout.EndVertical();
                }

                EditorGUILayout.EndHorizontal();


                if (        //(bindingEnabled	!=	bind.enabled) ||
                    (separateAxes != target.separateAxes) ||
                    (singleAxis != target.singleAxis) ||
                    (reverseSingleAxis != target.reverseSingleAxis) ||
                    (positiveAxis != target.positiveAxis) ||
                    (negativeAxis != target.negativeAxis) ||
                    (positiveAsPositive != target.positiveAxisAsPositive) ||
                    (negativeAsPositive != target.negativeAxisAsPositive))
                {
                    CFGUI.CreateUndo("Analog Axis Binding modification.", this.parent.undoObject);

                    //bind.enabled			= bindingEnabled;
                    target.separateAxes           = separateAxes;
                    target.singleAxis             = singleAxis;
                    target.positiveAxis           = positiveAxis;
                    target.negativeAxis           = negativeAxis;
                    target.positiveAxisAsPositive = positiveAsPositive;
                    target.negativeAxisAsPositive = negativeAsPositive;
                    target.reverseSingleAxis      = reverseSingleAxis;

                    CFGUI.EndUndo(this.parent.undoObject);
                }
            }
Пример #3
0
            // ---------------
            public void Execute()
            {
                if (this.binding == null)
                {
                    return;
                }

                CFGUI.CreateUndo(this.undoLabel, this.undoObject);

                DigitalBinding       digiBinding   = (this.binding as DigitalBinding);
                AxisBinding          analogBinding = (this.binding as AxisBinding);
                EmuTouchBinding      touchBinding  = (this.binding as EmuTouchBinding);
                MousePositionBinding mouseBinding  = (this.binding as MousePositionBinding);

                //JoystickNameBinding		joyNameBinding	= (this.binding as JoystickNameBinding);

                // Digi binding...

                if (digiBinding != null)
                {
                    if (this.digiKey != KeyCode.None)
                    {
                        digiBinding.Enable();

                        if (this.digiKeyElemId < 0)
                        {
                            digiBinding.AddKey(this.digiKey);
                        }
                        else
                        {
                            digiBinding.ReplaceKey(this.digiKeyElemId, this.digiKey);
                        }
                    }

                    if (!string.IsNullOrEmpty(this.digiAxisName))
                    {
                        digiBinding.Enable();

                        DigitalBinding.AxisElem elem = null;


                        if (this.digiAxisElemId < 0)
                        {
                            elem = digiBinding.AddAxis();
                        }
                        else
                        {
                            elem = digiBinding.GetAxisElem(this.digiAxisElemId);
                        }

                        if (elem != null)
                        {
                            elem.SetAxis(this.digiAxisName, this.digiBindToPositiveAxis);
                        }
                    }
                }


                // Analog Binding...

                else if (analogBinding != null)
                {
                    if (!string.IsNullOrEmpty(this.analogAxisName))
                    {
                        analogBinding.Enable();

                        AxisBinding.TargetElem elem = null;

                        if (this.analogElemId < 0)
                        {
                            elem = analogBinding.AddTarget();
                        }
                        else
                        {
                            elem = analogBinding.GetTarget(this.analogElemId);
                        }

                        if (elem != null)
                        {
                            if (this.analogSeparate)
                            {
                                elem.SetSeparateAxis(this.analogAxisName, this.analogPositiveSide, !this.analogFlip);
                            }
                            else
                            {
                                elem.SetSingleAxis(this.analogAxisName, this.analogFlip);
                            }
                        }
                    }
                }

                // Touch Binding...

                else if (touchBinding != null)
                {
                    touchBinding.Enable();
                }

                // Mouse Binding...

                else if (mouseBinding != null)
                {
                    mouseBinding.Enable();
                }


                CFGUI.EndUndo(this.undoObject);

                if (this.onRefreshCallback != null)
                {
                    this.onRefreshCallback();
                }
            }