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; }