private void updateDeployAnimation(ParachuteModelData[] modules, ChuteAnimationState state, float progress, float randomization, float lerpDps)
 {
     foreach (ParachuteModelData data in modules)
     {
         data.updateDeployAnimation(state, progress, randomization, lerpDps);
     }
 }
 private void updateDeployAnimation(ParachuteModelData[] modules, ChuteAnimationState state, float progress)
 {
     updateDeployAnimation(modules, state, progress, wobbleMultiplier, lerpDegreePerSecond);
 }
        public void updateDeployAnimation(ChuteAnimationState state, float progress, float randomization, float lerpDPS)
        {
            Vector3 targetA = Vector3.zero, targetB = Vector3.zero, scaleA = Vector3.one, scaleB = Vector3.one;

            switch (state)
            {
            case ChuteAnimationState.CUT:
            case ChuteAnimationState.RETRACTED:
                targetA = retractedTarget.transform.position;
                targetB = retractedTarget.transform.position;
                scaleA  = retractedScale;
                scaleB  = retractedScale;
                break;

            case ChuteAnimationState.DEPLOYING_SEMI:
                targetA = retractedTarget.transform.position;
                targetB = semiDeployedTarget.transform.position;
                scaleA  = retractedScale;
                scaleB  = semiDeployedScale;
                break;

            case ChuteAnimationState.SEMI_DEPLOYED:
                targetA = semiDeployedTarget.transform.position;
                targetB = semiDeployedTarget.transform.position;
                scaleA  = semiDeployedScale;
                scaleB  = semiDeployedScale;
                break;

            case ChuteAnimationState.DEPLOYING_FULL:
                targetA = semiDeployedTarget.transform.position;
                targetB = fullDeployedTarget.transform.position;
                scaleA  = semiDeployedScale;
                scaleB  = fullDeployedScale;
                break;

            case ChuteAnimationState.FULL_DEPLOYED:
                targetA = fullDeployedTarget.transform.position;
                targetB = fullDeployedTarget.transform.position;
                scaleA  = fullDeployedScale;
                scaleB  = fullDeployedScale;
                break;
            }
            Vector3 target  = Vector3.Lerp(targetA, targetB, progress);
            Vector3 lookDir = (-(parachutePivot.transform.position - target));

            lookDir.Normalize();
            parachutePivot.transform.rotation = Quaternion.LookRotation(lookDir, partTransform.forward);
            if (randomization > 0)
            {
                float rand = Time.time + (GetHashCode() % 32);//should be different per parachute-cap instance
                float rx   = (Mathf.PerlinNoise(rand, 0) - 0.5f) * randomization;
                float ry   = (Mathf.PerlinNoise(rand, 4) - 0.5f) * randomization;
                float rz   = (Mathf.PerlinNoise(rand, 8) - 0.5f) * randomization;
                parachutePivot.transform.Rotate(new Vector3(rx, ry, rz));
            }
            if (lerpDPS > 0)
            {
                parachutePivot.transform.rotation = Quaternion.RotateTowards(prevWind, parachutePivot.transform.rotation, lerpDPS * TimeWarp.fixedDeltaTime);
            }
            baseModel.transform.localScale = Vector3.Lerp(scaleA, scaleB, progress);
            prevWind = parachutePivot.transform.rotation;
        }
 private void updateDeployAnimation(ParachuteModelData[] modules, ChuteAnimationState state, float progress, float randomization, float lerpDps)
 {
     foreach (ParachuteModelData data in modules) { data.updateDeployAnimation(state, progress, randomization, lerpDps); }
 }
 private void updateDeployAnimation(ParachuteModelData[] modules, ChuteAnimationState state, float progress)
 {
     updateDeployAnimation(modules, state, progress, wobbleMultiplier, lerpDegreePerSecond);
 }
 public void updateDeployAnimation(ChuteAnimationState state, float progress, float randomization, float lerpDPS)
 {
     Vector3 targetA = Vector3.zero, targetB = Vector3.zero, scaleA = Vector3.one, scaleB = Vector3.one;
     switch (state)
     {
         case ChuteAnimationState.CUT:
         case ChuteAnimationState.RETRACTED:
             targetA = retractedTarget.transform.position;
             targetB = retractedTarget.transform.position;
             scaleA = retractedScale;
             scaleB = retractedScale;
             break;
         case ChuteAnimationState.DEPLOYING_SEMI:
             targetA = retractedTarget.transform.position;
             targetB = semiDeployedTarget.transform.position;
             scaleA = retractedScale;
             scaleB = semiDeployedScale;
             break;
         case ChuteAnimationState.SEMI_DEPLOYED:
             targetA = semiDeployedTarget.transform.position;
             targetB = semiDeployedTarget.transform.position;
             scaleA = semiDeployedScale;
             scaleB = semiDeployedScale;
             break;
         case ChuteAnimationState.DEPLOYING_FULL:
             targetA = semiDeployedTarget.transform.position;
             targetB = fullDeployedTarget.transform.position;
             scaleA = semiDeployedScale;
             scaleB = fullDeployedScale;
             break;
         case ChuteAnimationState.FULL_DEPLOYED:
             targetA = fullDeployedTarget.transform.position;
             targetB = fullDeployedTarget.transform.position;
             scaleA = fullDeployedScale;
             scaleB = fullDeployedScale;
             break;
     }
     Vector3 target = Vector3.Lerp(targetA, targetB, progress);
     Vector3 lookDir = (-(parachutePivot.transform.position - target));
     lookDir.Normalize();
     parachutePivot.transform.rotation = Quaternion.LookRotation(lookDir, partTransform.forward);
     if (randomization > 0)
     {
         float rand = Time.time + (GetHashCode() % 32);//should be different per parachute-cap instance
         float rx = (Mathf.PerlinNoise(rand, 0) - 0.5f) * randomization;
         float ry = (Mathf.PerlinNoise(rand, 4) - 0.5f) * randomization;
         float rz = (Mathf.PerlinNoise(rand, 8) - 0.5f) * randomization;
         parachutePivot.transform.Rotate(new Vector3(rx, ry, rz));
     }
     if (lerpDPS > 0)
     {
         parachutePivot.transform.rotation = Quaternion.RotateTowards(prevWind, parachutePivot.transform.rotation, lerpDPS * TimeWarp.fixedDeltaTime);
     }
     baseModel.transform.localScale = Vector3.Lerp(scaleA, scaleB, progress);
     prevWind = parachutePivot.transform.rotation;
 }