示例#1
0
	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 );
			}
		}
	}
示例#2
0
	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 );
			}
		}
	}
示例#3
0
    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--;
        }
    }
示例#4
0
    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;
        }
    }
示例#5
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 );
    }
示例#6
0
    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 );
    }
示例#7
0
 public static void UnRegister(ETCBase ctrl)
 {
     ETCInput.instance.UnRegisterControl( ctrl);
 }
示例#8
0
 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");
     }
 }
示例#9
0
 public static void UnRegister(ETCBase ctrl)
 {
     ETCInput.instance.UnRegisterControl(ctrl);
 }