// ------------------ 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); } }
// --------------- 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(); } }