public void RegisterControl(ETCBase ctrl){ if (controls.ContainsKey( ctrl.name)){ Debug.LogWarning("ETCInput control : " + ctrl.name + " already exists"); } else{ controls.Add( ctrl.name, ctrl); if (ctrl.GetType() == typeof(ETCJoystick) ){ RegisterAxis( (ctrl as ETCJoystick).axisX ); RegisterAxis( (ctrl as ETCJoystick).axisY ); } else if (ctrl.GetType() == typeof(ETCTouchPad) ){ RegisterAxis( (ctrl as ETCTouchPad).axisX ); RegisterAxis( (ctrl as ETCTouchPad).axisY ); } else if (ctrl.GetType() == typeof(ETCDPad) ){ RegisterAxis( (ctrl as ETCDPad).axisX ); RegisterAxis( (ctrl as ETCDPad).axisY ); } else if (ctrl.GetType() == typeof(ETCButton)){ RegisterAxis( (ctrl as ETCButton).axis ); } } }
public void UnRegisterControl(ETCBase ctrl){ if (controls.ContainsKey( ctrl.name) && ctrl.enabled ){ controls.Remove( ctrl.name); if (ctrl.GetType() == typeof(ETCJoystick) ){ UnRegisterAxis( (ctrl as ETCJoystick).axisX ); UnRegisterAxis( (ctrl as ETCJoystick).axisY ); } else if (ctrl.GetType() == typeof(ETCTouchPad) ){ UnRegisterAxis( (ctrl as ETCTouchPad).axisX ); UnRegisterAxis( (ctrl as ETCTouchPad).axisY ); } else if (ctrl.GetType() == typeof(ETCDPad) ){ UnRegisterAxis( (ctrl as ETCDPad).axisX ); UnRegisterAxis( (ctrl as ETCDPad).axisY ); } else if (ctrl.GetType() == typeof(ETCButton)){ UnRegisterAxis( (ctrl as ETCButton).axis ); } } }
public static void AxisInspector(ETCAxis axis, string label, ETCBase.ControlType type) { EditorGUILayout.BeginHorizontal(); //GUI.color = color; axis.enable = ETCGuiTools.Toggle(label + " axis : ",axis.enable,true,125,true); //GUI.color = Color.white; axis.name = EditorGUILayout.TextField("",axis.name,GUILayout.MinWidth(50)); EditorGUILayout.EndVertical(); if (axis.enable){ EditorGUI.indentLevel++; axis.invertedAxis = ETCGuiTools.Toggle("Inverted axis",axis.invertedAxis,true); if (type == ETCBase.ControlType.Joystick ){ axis.deadValue = EditorGUILayout.Slider("Dead lenght",axis.deadValue,0f,1f); } if (type == ETCBase.ControlType.Button || type == ETCBase.ControlType.DPad){ axis.isValueOverTime = ETCGuiTools.Toggle("Value over the time",axis.isValueOverTime,true); if (axis.isValueOverTime){ //EditorGUI.indentLevel--; ETCGuiTools.BeginGroup(5);{ axis.overTimeStep = EditorGUILayout.FloatField("Step",axis.overTimeStep); axis.maxOverTimeValue = EditorGUILayout.FloatField("Max value",axis.maxOverTimeValue); }ETCGuiTools.EndGroup(); //EditorGUI.indentLevel++; } } if (type == ETCBase.ControlType.Joystick ){ axis.axisThreshold = EditorGUILayout.Slider("On/Off Threshold",axis.axisThreshold,0f,1f); } string labelspeed = "Speed"; if (type== ETCBase.ControlType.TouchPad){ labelspeed ="Sensitivity"; } axis.speed = EditorGUILayout.FloatField(labelspeed,axis.speed); // Direct properties EditorGUILayout.Space(); axis.actionOn = (ETCAxis.ActionOn)EditorGUILayout.EnumPopup("Action on",axis.actionOn ); axis.directTransform = (Transform)EditorGUILayout.ObjectField("Direct action to",axis.directTransform,typeof(Transform),true); axis.directAction = (ETCAxis.DirectAction ) EditorGUILayout.EnumPopup( "Action",axis.directAction); axis.axisInfluenced = (ETCAxis.AxisInfluenced) EditorGUILayout.EnumPopup("Affected axis",axis.axisInfluenced); EditorGUILayout.Space(); if ( axis.directCharacterController!=null){ axis.gravity = EditorGUILayout.FloatField("Gravity",axis.gravity); } //if (type != ETCBase.ControlType.TouchPad){ // Inertia axis.isEnertia = ETCGuiTools.Toggle("Enable inertia", axis.isEnertia,true); if (axis.isEnertia){ EditorGUI.indentLevel--; ETCGuiTools.BeginGroup(20);{ axis.inertia = EditorGUILayout.Slider("Inertia",axis.inertia,1f,500f); axis.inertiaThreshold = EditorGUILayout.FloatField("Threshold",axis.inertiaThreshold); }ETCGuiTools.EndGroup(); EditorGUI.indentLevel++; } // AutoStab & clamp rotation if (axis.directAction == ETCAxis.DirectAction.RotateLocal ){ //AutoStab axis.isAutoStab = ETCGuiTools.Toggle("Automatic stabilization",axis.isAutoStab,true); if (axis.isAutoStab){ EditorGUI.indentLevel--; ETCGuiTools.BeginGroup(20);{ axis.autoStabSpeed = EditorGUILayout.FloatField("Speed",axis.autoStabSpeed); axis.autoStabThreshold = EditorGUILayout.FloatField("Threshold ", axis.autoStabThreshold); }ETCGuiTools.EndGroup(); EditorGUI.indentLevel++; } // clamp rotation axis.isClampRotation = ETCGuiTools.Toggle("Clamp rotation",axis.isClampRotation,true); if (axis.isClampRotation){ EditorGUI.indentLevel--; ETCGuiTools.BeginGroup(20);{ axis.maxAngle = EditorGUILayout.FloatField("Max angle",axis.maxAngle); axis.minAngle = EditorGUILayout.FloatField("Min angle",axis.minAngle); }ETCGuiTools.EndGroup(); EditorGUI.indentLevel++; } } //} EditorGUI.indentLevel--; } }
private void ComputAxisValue(float realValue, ETCBase.ControlType type, bool isOnDrag, bool deltaTime) { if (enable){ if (type == ETCBase.ControlType.Joystick){ float dist = Mathf.Max(Mathf.Abs(realValue),0.001f); float dead = Mathf.Max(dist - deadValue, 0)/(1f - deadValue)/dist; realValue *= dead; } if (isEnertia){ realValue = (realValue-axisValue); realValue /= inertia; axisValue += realValue; if (Mathf.Abs(axisValue)< inertiaThreshold && !isOnDrag ) { axisValue = 0; } } else if (!isValueOverTime || (isValueOverTime && realValue ==0)){ axisValue = realValue; } if (deltaTime){ axisSpeedValue = axisValue * speed * Time.deltaTime; } else{ axisSpeedValue = axisValue * speed; } } else{ axisValue = 0; axisSpeedValue =0; } }
public void UpdateAxis(float realValue, bool isOnDrag, ETCBase.ControlType type,bool deltaTime=true) { // Auto stabilization if (isAutoStab && axisValue ==0){ DoAutoStabilisation(); } if (invertedAxis){realValue *= -1;} // Time push if (isValueOverTime && realValue!=0){ axisValue += overTimeStep * Mathf.Sign(realValue ) * Time.deltaTime; if (Mathf.Sign(axisValue )>0){ axisValue = Mathf.Clamp( axisValue,0,maxOverTimeValue); } else{ axisValue = Mathf.Clamp( axisValue,-maxOverTimeValue,0); } } // Axis value ComputAxisValue(realValue, type,isOnDrag,deltaTime ); }
public void UpdateAxis(float realValue, bool isOnDrag, ETCBase.ControlType type,bool deltaTime=true) { // Auto link if (autoLinkTagPlayer && player==null || ( player && !player.activeSelf)){ player = GameObject.FindGameObjectWithTag(autoTag); if (player){ directTransform = player.transform; } } // Auto stabilization if (isAutoStab && axisValue ==0){ DoAutoStabilisation(); } if (invertedAxis){realValue *= -1;} // Time push if (isValueOverTime && realValue!=0){ axisValue += overTimeStep * Mathf.Sign(realValue ) * Time.deltaTime; if (Mathf.Sign(axisValue )>0){ axisValue = Mathf.Clamp( axisValue,0,maxOverTimeValue); } else{ axisValue = Mathf.Clamp( axisValue,-maxOverTimeValue,0); } } // Axis value ComputAxisValue(realValue, type,isOnDrag,deltaTime ); }
public static void UnRegister(ETCBase ctrl) { ETCInput.instance.UnRegisterControl( ctrl); }
public static void SetDPadAxesCount(string ctrlName, ETCBase.DPadAxis value) { if (ETCInput.instance.controls.TryGetValue( ctrlName, out control)){ control.dPadAxisCount = value; } else{ Debug.LogWarning("ETCInput : " + ctrlName + " doesn't exist"); } }
public static void UnRegister(ETCBase ctrl) { ETCInput.instance.UnRegisterControl(ctrl); }