public override void UpdateMotor(CharacterMover mover)
    {
        //apply Friction
        float speed = mover.velocity.magnitude;

        if (speed != 0)         //avoid dividing by zero
        {
            float drop = speed * mover.friction * Time.deltaTime;
            mover.velocity *= Mathf.Max(speed - drop, 0) / speed;             //scale the velocity based on friction.
        }

        mover.velocity = mover.Accelerate(mover.accelDir, mover.velocity, mover.groundAccel, mover.maxGroundSpeed);

        //jumping
        if (mover.kpJump)
        {
            mover.velocity = new Vector3(mover.velocity.x, mover.jumpSpeed, mover.velocity.z);
            mover.gravity  = new Vector3(0f, mover.gSpeed, 0f);
        }

        //floor no longer beneath us, switch state
        if (!mover.IsGrounded())
        {
            mover.currentState = MovementState.falling;
            Debug.Log("Switch to falling");
        }
    }
    public override void UpdateMotor(CharacterMover mover)
    {
        //apply Friction
        float speed = mover.velocity.magnitude;

        if (speed != 0)         //avoid dividing by zero
        {
            float drop = speed * mover.friction * Time.deltaTime;
            mover.velocity *= Mathf.Max(speed - drop, 0) / speed;             //scale the velocity based on friction.
        }


        mover.velocity += mover.gravity * .2f * Time.deltaTime;

        mover.velocity = mover.Accelerate(mover.accelDir, mover.velocity, mover.groundAccel, mover.maxGroundSpeed);

        //jumping
        if (mover.kpJump)
        {
            mover.velocity += new Vector3(0f, mover.jumpSpeed, 0f);
        }
        //float upwards
        if (mover.kJump)
        {
            mover.velocity += mover.gravity * -.6f * Time.deltaTime;
        }
    }
    public override void UpdateMotor(CharacterMover mover)
    {
        //variable height
        if (mover.krJump && mover.velocity.y > 0f)
        {
            mover.gravity = new Vector3(0f, mover.gSpeedVariable, 0f);
        }
        if (mover.velocity.y <= 0f)
        {
            //if (mover.wallSlide)
            //	mover.gravity= new Vector3(0f, mover.gSpeed/5, 0f);
            //else
            mover.gravity = new Vector3(0f, mover.gSpeed, 0f);
        }
        mover.velocity += mover.gravity * Time.deltaTime;
        mover.wallSlide = false;

        mover.velocity = mover.Accelerate(mover.accelDir, mover.velocity, mover.airAccel, mover.maxAirSpeed);

        //mover.charController.Move (mover.velocity);
        if (mover.IsGrounded())
        {
            mover.velocity     = new Vector3(mover.velocity.x, 0f, mover.velocity.z);
            mover.currentState = MovementState.walking;
            mover.wallSlide    = false;
            mover.gravity      = new Vector3(0f, mover.gSpeed, 0f);
            Debug.Log("Switch to walking");
        }
    }