public override void UpdateController () {
		if (this.enabled) {
			tracking = true;

			if (leftFootAnimation == null) 
				leftFootAnimation = ivr.leftFootTarget.GetComponent<IVR_Animate>();
			if (rightFootAnimation == null)
				rightFootAnimation = ivr.rightFootTarget.GetComponent<IVR_Animate>();

			if (selected)
				FeetAnimation();
		} else
			tracking = false;
	}
    public override void StartController(InstantVR ivr)
    {
        base.StartController(ivr);

        if (this.transform == ivr.leftFootTarget) {
            isLeftFoot = true;
            leftFoot = this;
            rightFoot = ivr.rightFootTarget.GetComponent<IVR_AnimatorFoot>();
            leftFootAnimation = this.gameObject.AddComponent<IVR_Animate>();
        } else {
            rightFoot = this;
            leftFoot = ivr.leftFootTarget.GetComponent<IVR_AnimatorFoot>();
            rightFootAnimation = this.gameObject.AddComponent<IVR_Animate>();
        }

        startHipFootL = ivr.hipTarget.InverseTransformPoint(ivr.leftFootTarget.position);//ivr.leftFootTarget.position - ivr.hipTarget.position;
        startHipFootR = ivr.hipTarget.InverseTransformPoint(ivr.rightFootTarget.position);//ivr.rightFootTarget.position - ivr.hipTarget.position;

        startFootLposition = ivr.leftFootTarget.position - ivr.BasePosition;
        startFootRposition = ivr.rightFootTarget.position - ivr.BasePosition;
    }
    private void FootStepping(IVR_Animate footAnimation, Vector3 startHipFoot)
    {
        if (footAnimation.f >= 1) {
            footAnimation.startStep = false;
            footAnimation.f = 0;
        } else if (footAnimation.f > 0) {
            Vector3 stepTarget = ivr.hipTarget.TransformPoint(startHipFoot) - stepStart;
            stepTarget = new Vector3(stepTarget.x, startPosition.y, stepTarget.z);

            if (curSpeed.x != 0 || curSpeed.z != 0) {
                Vector3 avgSpeed2 = basePointDelta / footAnimation.f;
                stepTarget += avgSpeed2 / 2;
            }

            Vector3 newPosition = footAnimation.AnimationLerp(Vector3.zero, stepTarget, ref footAnimation.f);
            transform.position = stepStart + newPosition;
            transform.rotation = ivr.hipTarget.rotation; // should be eased towards this rotation in the end
        }
    }
    protected void FootStepRight(IVR_Animate footAnimation, Vector3 hipTargetPosition, Vector3 footTargetPosition, bool follow)
    {
        if (footAnimation.startStep == false) {
            basePointStart = ivr.BasePosition;
            stepStart = new Vector3(footTargetPosition.x, ivr.BasePosition.y, footTargetPosition.z);
            footAnimation.startStep = true;

            if (!follow)
                rightFoot.lastStepRight = true;
            leftFoot.lastStepLeft = false;
        }
    }