Ejemplo n.º 1
0
    private void ComputeTargets(int keyInd, float lt, float t) {

        //update both arms
        for (int arm = 0; arm < 2; arm++) {

            //Actual target
            Vector3 target = _animInfo.ComputeInterpolatedTarget(lt, keyInd, arm);

            if (t < 0) {
                //globalTf
                // project target to a position before position at keyInd                              
                Vector3 pivot = _animInfo.ComputeInterpolatedTarget(0, 0, arm); //TCB interpolation for position
                target = 2*pivot - target;

            }
            else if (t > 1) {
                //globalT
                // project target to a position beyond keyInd

                Vector3 pivot = _animInfo.ComputeInterpolatedTarget(0, _animInfo.Keys.Length - 1, arm);
                    //TCB interpolation  for position           

                target = 2*pivot - target;
            }

            if (arm == 0)
                _targetL = target;

            else
                _targetR = target;




        }
        //update other body parts

        _bodyTargetPos = _animInfo.ComputeInterpolatedBodyPos(_fbIk.solver.bodyEffector.bone.transform, keyInd, lt);

        _footLTargetPos = _animInfo.ComputeInterpolatedBodyPos(_fbIk.solver.leftFootEffector.bone.transform, keyInd, lt);
        _footRTargetPos = _animInfo.ComputeInterpolatedBodyPos(_fbIk.solver.rightFootEffector.bone.transform, keyInd, lt);

        _shoulderLTargetPos = _animInfo.ComputeInterpolatedBodyPos(_fbIk.solver.leftShoulderEffector.bone.transform,
                                                                   keyInd, lt);
        _shoulderRTargetPos = _animInfo.ComputeInterpolatedBodyPos(_fbIk.solver.rightShoulderEffector.bone.transform,
                                                                   keyInd, lt);


        _elbowLTargetPos = _animInfo.ComputeInterpolatedBodyPos(_torso.Elbow[0], keyInd, lt);
        _elbowRTargetPos = _animInfo.ComputeInterpolatedBodyPos(_torso.Elbow[1], keyInd, lt);


        _kneeLTargetPos = _animInfo.ComputeInterpolatedBodyPos(_torso.Knee[0], keyInd, lt);
        _kneeRTargetPos = _animInfo.ComputeInterpolatedBodyPos(_torso.Knee[1], keyInd, lt);




        _thighLTargetPos = _animInfo.ComputeInterpolatedBodyPos(_torso.Pelvis[0], keyInd, lt);
        _thighRTargetPos = _animInfo.ComputeInterpolatedBodyPos(_torso.Pelvis[1], keyInd, lt);



        //Update positions considering anticipation
        if (t < 0) {
            Vector3 pivot = _animInfo.ComputeInterpolatedBodyPos(_fbIk.solver.bodyEffector.bone.transform, 0, 0);
            //if(_animInfo.CharacterName.Contains("CUSTOMER"))
            //   _bodyTargetPos = 2*pivot - _bodyTargetPos;

            pivot = _animInfo.ComputeInterpolatedBodyPos(_fbIk.solver.leftFootEffector.bone.transform, 0, 0);
            _footLTargetPos = 2*pivot - _footLTargetPos;


            pivot = _animInfo.ComputeInterpolatedBodyPos(_fbIk.solver.rightFootEffector.bone.transform, 0, 0);
            _footRTargetPos = 2*pivot - _footRTargetPos;

            pivot = _animInfo.ComputeInterpolatedBodyPos(_fbIk.solver.leftShoulderEffector.bone.transform, 0, 0);
            _shoulderLTargetPos = 2*pivot - _shoulderLTargetPos;

            pivot = _animInfo.ComputeInterpolatedBodyPos(_fbIk.solver.rightShoulderEffector.bone.transform, 0, 0);
            _shoulderRTargetPos = 2*pivot - _shoulderRTargetPos;

            pivot = _animInfo.ComputeInterpolatedBodyPos(_torso.Elbow[0], 0, 0);
            _elbowLTargetPos = 2*pivot - _elbowLTargetPos;

            pivot = _animInfo.ComputeInterpolatedBodyPos(_torso.Elbow[1], 0, 0);
            _elbowRTargetPos = 2*pivot - _elbowRTargetPos;

            pivot = _animInfo.ComputeInterpolatedBodyPos(_torso.Knee[0], 0, 0);
            _kneeLTargetPos = 2*pivot - _kneeLTargetPos;

            pivot = _animInfo.ComputeInterpolatedBodyPos(_torso.Knee[1], 0, 0);
            _kneeRTargetPos = 2*pivot - _kneeRTargetPos;


            pivot = _animInfo.ComputeInterpolatedBodyPos(_torso.Pelvis[0], 0, 0);
            _thighLTargetPos = 2*pivot - _thighLTargetPos;

            pivot = _animInfo.ComputeInterpolatedBodyPos(_torso.Pelvis[1], 0, 0);
            _thighRTargetPos = 2*pivot - _thighRTargetPos;
        }
            //Update positions considering overshoot
        else if (t > 1) {
            Vector3 pivot = _animInfo.ComputeInterpolatedBodyPos(_fbIk.solver.bodyEffector.bone.transform,
                                                                 _animInfo.Keys.Length - 1, 0);

            pivot = _animInfo.ComputeInterpolatedBodyPos(_fbIk.solver.leftFootEffector.bone.transform,
                                                         _animInfo.Keys.Length - 1, 0);
            _footLTargetPos = 2*pivot - _footLTargetPos;


            pivot = _animInfo.ComputeInterpolatedBodyPos(_fbIk.solver.rightFootEffector.bone.transform,
                                                         _animInfo.Keys.Length - 1, 0);
            _footRTargetPos = 2*pivot - _footRTargetPos;

            pivot = _animInfo.ComputeInterpolatedBodyPos(_fbIk.solver.leftShoulderEffector.bone.transform,
                                                         _animInfo.Keys.Length - 1, 0);
            _shoulderLTargetPos = 2*pivot - _shoulderLTargetPos;

            pivot = _animInfo.ComputeInterpolatedBodyPos(_fbIk.solver.rightShoulderEffector.bone.transform,
                                                         _animInfo.Keys.Length - 1, 0);
            _shoulderRTargetPos = 2*pivot - _shoulderRTargetPos;



            pivot = _animInfo.ComputeInterpolatedBodyPos(_torso.Elbow[0], _animInfo.Keys.Length - 1, 0);
            _elbowLTargetPos = 2*pivot - _elbowLTargetPos;

            pivot = _animInfo.ComputeInterpolatedBodyPos(_torso.Elbow[1], _animInfo.Keys.Length - 1, 0);
            _elbowRTargetPos = 2*pivot - _elbowRTargetPos;

            pivot = _animInfo.ComputeInterpolatedBodyPos(_torso.Knee[0], _animInfo.Keys.Length - 1, 0);
            _kneeLTargetPos = 2*pivot - _kneeLTargetPos;

            pivot = _animInfo.ComputeInterpolatedBodyPos(_torso.Knee[1], _animInfo.Keys.Length - 1, 0);
            _kneeRTargetPos = 2*pivot - _kneeRTargetPos;


            pivot = _animInfo.ComputeInterpolatedBodyPos(_torso.Pelvis[0], _animInfo.Keys.Length - 1, 0);
            _thighLTargetPos = 2*pivot - _thighLTargetPos;

            pivot = _animInfo.ComputeInterpolatedBodyPos(_torso.Pelvis[1], _animInfo.Keys.Length - 1, 0);
            _thighRTargetPos = 2*pivot - _thighRTargetPos;

        }

    }