//! \endcond // --------------------- public TouchButton() : base() { this.pressBinding = new DigitalBinding(); this.toggleOnlyBinding = new DigitalBinding(); this.emulateTouchPressure = true; this.touchPressureBinding = new AxisBinding(); this.centerWhenFollowing = true; this.toggleOnAction = ToggleOnAction.OnPress; this.toggleOffAction = ToggleOffAction.OnRelease; this.autoToggleOff = false; this.autoToggleOffTimeOut = 1.0f; }
// ----------------- public TouchJoystickCreationWizard() : base() { this.minSize = new Vector2(this.minSize.x, 500); this.pressBinding = new DigitalBinding(); this.pressBindingInsp = new DigitalBindingInspector(null, new GUIContent("Press binding")); this.horzAxisBinding = new AxisBinding(); this.vertAxisBinding = new AxisBinding(); this.horzAxisBindingInsp = new AxisBindingInspector(null, new GUIContent("Horizontal Axis Binding"), false, InputRig.InputSource.Analog); this.vertAxisBindingInsp = new AxisBindingInspector(null, new GUIContent("Vertical Axis Binding"), false, InputRig.InputSource.Analog); this.touchPressureBinding = new AxisBinding(); this.touchPressureBindingInsp = new AxisBindingInspector(null, new GUIContent("Touch Pressure Binding"), false, InputRig.InputSource.Analog, this.DrawPressureBindingExtraGUI); }
//! \endcond // ------------------- public TouchSteeringWheel() : base() { this.analogConfig = new AnalogConfig(); this.analogConfig.analogDeadZone = 0.0f; this.touchSmoothing = 0.1f; this.centerOnDirectTouch = false; this.centerWhenFollowing = false; this.wheelMode = WheelMode.Swipe; this.pressBinding = new DigitalBinding(); this.analogTurnBinding = new AxisBinding("Horizontal", false); this.turnLeftBinding = new DigitalBinding(KeyCode.None, true, "Horizontal", true, false); this.turnRightBinding = new DigitalBinding(KeyCode.None, true, "Horizontal", false, false); this.emulateTouchPressure = true; this.touchPressureBinding = new AxisBinding(); }
// ---------------------- static private void AddDigitalBindingKeySubMenu(GenericMenu menu, KeyCode key, BindingDescription desc, System.Action onRefreshCallback) { DigitalBinding digiBinding = (DigitalBinding)desc.binding; string menuPath = desc.menuPath + desc.nameFormatted + "/"; for (int i = -1; i < digiBinding.keyList.Count; ++i) { UniversalBindingAssignment o = new UniversalBindingAssignment(); o.undoLabel = "Bind " + key + " key to " + desc.name; o.undoObject = desc.undoObject; o.binding = desc.binding; o.onRefreshCallback = onRefreshCallback; o.digiKey = key; o.digiKeyElemId = i; string menuItemLabel = ""; if (i < 0) { menuItemLabel = "Add new as new key target."; } else { menuItemLabel = "Replace \"" + digiBinding.keyList[i] + "\" (" + i + ")."; } menu.AddItem(new GUIContent(menuPath + menuItemLabel), true, o.Execute); if ((i < 0) && (digiBinding.keyList.Count > 0)) { menu.AddSeparator(menuPath); } } }
// ------------------ public void Draw(DigitalBinding bind, InputRig rig) { bool bindingEnabled = bind.enabled; EditorGUILayout.BeginVertical(); if (bindingEnabled = EditorGUILayout.ToggleLeft(this.labelContent, bindingEnabled, GUILayout.MinWidth(30))) { CFGUI.BeginIndentedVertical(CFEditorStyles.Inst.transpSunkenBG); EditorGUILayout.BeginVertical(CFEditorStyles.Inst.transpSunkenBG); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField(new GUIContent("Axis Targets"), GUILayout.MinWidth(30), GUILayout.ExpandWidth(true)); { if (GUILayout.Button(new GUIContent(CFEditorStyles.Inst.texPlusSign, "Add Axis Target"), CFEditorStyles.Inst.iconButtonStyle)) //, GUILayout.Width(20), GUILayout.Height(20))) { CFGUI.CreateUndo("Add new axis to Digital Binding.", this.undoObject); bind.AddAxis(); CFGUI.EndUndo(this.undoObject); } if (GUILayout.Button(new GUIContent(CFEditorStyles.Inst.texMinusSign, "Remove Axis Target"), CFEditorStyles.Inst.iconButtonStyle)) //, GUILayout.Width(20), GUILayout.Height(20))) { CFGUI.CreateUndo("Remove axis from Digital Binding.", this.undoObject); bind.RemoveLastAxis(); CFGUI.EndUndo(this.undoObject); } } EditorGUILayout.EndHorizontal(); { this.PrepareAxisElemInspList(bind.axisList.Count); if (bind.axisList.Count == 0) { EditorGUILayout.LabelField("No axis targets defined...", CFEditorStyles.Inst.centeredTextTranspBG); } else { for (int i = 0; i < bind.axisList.Count; ++i) { this.axisElemInspList[i].DrawGUI(bind.axisList[i], rig); } } } EditorGUILayout.EndVertical(); // Key targets... EditorGUILayout.BeginVertical(CFEditorStyles.Inst.transpSunkenBG); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField(new GUIContent("Key Targets"), GUILayout.MinWidth(30), GUILayout.ExpandWidth(true)); { if (GUILayout.Button(new GUIContent(CFEditorStyles.Inst.texPlusSign, "Add Key Target"), CFEditorStyles.Inst.iconButtonStyle)) //, GUILayout.Width(20), GUILayout.Height(20))) { CFGUI.CreateUndo("Add new key to Digital Binding.", this.undoObject); bind.AddKey(KeyCode.None); CFGUI.EndUndo(this.undoObject); } if (GUILayout.Button(new GUIContent(CFEditorStyles.Inst.texMinusSign, "Remove Key Target"), CFEditorStyles.Inst.iconButtonStyle)) //GUILayout.Width(20), GUILayout.Height(20))) { CFGUI.CreateUndo("Remove key from Digital Binding.", this.undoObject); bind.RemoveLastKey(); CFGUI.EndUndo(this.undoObject); } } EditorGUILayout.EndHorizontal(); { if (bind.keyList.Count == 0) { EditorGUILayout.LabelField("No key targets defined...", CFEditorStyles.Inst.centeredTextTranspBG); } else { EditorGUILayout.BeginVertical(CFEditorStyles.Inst.transpSunkenBG); for (int i = 0; i < bind.keyList.Count; ++i) { KeyCode keyOriginal = bind.keyList[i], key = keyOriginal; key = (KeyCode)EditorGUILayout.EnumPopup("" /*"KeyCode"*/, key, GUILayout.MinWidth(30), GUILayout.ExpandWidth(false)); if (key != keyOriginal) { CFGUI.CreateUndo("Digital Binding Key modification.", this.undoObject); bind.keyList[i] = key; CFGUI.EndUndo(this.undoObject); } } EditorGUILayout.EndVertical(); } } EditorGUILayout.EndVertical(); CFGUI.EndIndentedVertical(); } EditorGUILayout.EndVertical(); if ((bindingEnabled != bind.enabled)) { CFGUI.CreateUndo("Digital Binding modification.", this.undoObject); bind.enabled = bindingEnabled; CFGUI.EndUndo(this.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(); } }
// ---------------------- static public void AddBindingContainerToMenu( GenericMenu menu, IBindingContainer bc, System.Action onRefreshCallback, BindingDescription.BindingType typeMask, string commandName, string menuPath, Object undoObject, KeyCode digiKey = KeyCode.None, string axisName = null, int axisInputSourceMask = ((1 << 16) - 1)) //bool digiBindToPositiveAxis = true) //string joyName = null) { BindingDescriptionList bindingDescList = new BindingDescriptionList(typeMask, false, axisInputSourceMask, FormatBindingMenuLabel); //bc.GetSubBindingDescriptions(bindingDescList, typeMask, undoObject, menuPath, false, axisInputSourceMask); bc.GetSubBindingDescriptions(bindingDescList, undoObject, menuPath); for (int i = 0; i < bindingDescList.Count; ++i) { BindingDescription desc = bindingDescList[i]; string itemLabel = ""; bool itemEnabled = false; DigitalBinding digiBinding = (desc.binding as DigitalBinding); AxisBinding analogBinding = (desc.binding as AxisBinding); EmuTouchBinding touchBinding = (desc.binding as EmuTouchBinding); MousePositionBinding mouseBinding = (desc.binding as MousePositionBinding); // Digi binding... if (digiBinding != null) { // o.digiKey = digiKey; // o.digiAxisName = axisName; // o.digiBindToPositiveAxis = true; if (digiKey != KeyCode.None) { AddDigitalBindingKeySubMenu(menu, digiKey, desc, onRefreshCallback); } else if (!string.IsNullOrEmpty(axisName)) { AddDigitalBindingAxisSubMenu(menu, axisName, desc, onRefreshCallback); } } // Analog binding... else if (analogBinding != null) { AddAnalogBindingAxisSubMenu(menu, axisName, desc, onRefreshCallback); } // Touch binding... else if (touchBinding != null) { UniversalBindingAssignment o = new UniversalBindingAssignment(); o.undoObject = desc.undoObject; o.binding = desc.binding; o.onRefreshCallback = onRefreshCallback; o.undoLabel = "Bind [" + desc.nameFormatted + "] to Eumlated Touch."; itemLabel = o.undoLabel; menu.AddItem(new GUIContent(desc.menuPath + itemLabel), itemEnabled, o.Execute); } // Mouse binding... else if (mouseBinding != null) { UniversalBindingAssignment o = new UniversalBindingAssignment(); o.undoObject = desc.undoObject; o.binding = desc.binding; o.onRefreshCallback = onRefreshCallback; o.undoLabel = "Bind [" + desc.nameFormatted + "] to Mouse Position."; itemLabel = o.undoLabel; menu.AddItem(new GUIContent(desc.menuPath + itemLabel), itemEnabled, o.Execute); } else { continue; } } }