Example #1
0
    private IEnumerator MoveShakeStrength(ShakeData shakeData, Action onShakeCompleted = null)
    {
        float durationOffset       = UnityEngine.Random.Range(-shakeData.randomDurationOffset, shakeData.randomDurationOffset);
        float targetStrengthOffset = UnityEngine.Random.Range(-shakeData.randomTargetStrengthOffset, shakeData.randomTargetStrengthOffset);

        float duration       = shakeData.duration + durationOffset;
        float targetStrength = shakeData.targetStrength + targetStrengthOffset;
        float startStrength  = shakeStrength;

        float time = 0;

        while (time < duration)
        {
            float absoluteValue      = time / duration;
            float easedAbsoluteValue = EasingHelper.EaseInSine(absoluteValue);

            float strengthProgess      = targetStrength - startStrength;
            float easedStrengthProgess = strengthProgess * easedAbsoluteValue;

            shakeStrength = startStrength + easedStrengthProgess;

            time += Time.deltaTime;
            yield return(new WaitForEndOfFrame());
        }

        shakeStrength = targetStrength;

        if (onShakeCompleted != null)
        {
            onShakeCompleted();
        }
    }