Esempio n. 1
0
 private void ShakeCamera(ShakeStrength force)
 {
     _currentStrength  = force;
     _isShaking        = true;
     _originalPosition = transform.position;
     _currentShakeTime = 0;
 }
Esempio n. 2
0
 public void Shake(ShakeStrength strength)
 {
     // If shake is ongoing, stop it before starting new one
     if (_lastShake != null)
     {
         GameManager.Instance.time.GetController().StopCoroutine(_lastShake);
         _lastShake = null;
     }
     _lastShake = PerformShake(strength);
     GameManager.Instance.time.GetController().StartCoroutine(_lastShake);
 }
Esempio n. 3
0
    private IEnumerator PerformShake(ShakeStrength strength)
    {
        Vector3 startingPosition = transform.localPosition;
        float   elapsedTime      = 0;
        float   dampenFactor     = 1f;
        float   magnitude        = GetMagnitude(strength);

        while (elapsedTime < _shakeDuration)
        {
            elapsedTime            += GameManager.Instance.time.deltaTime;
            dampenFactor            = Mathf.Lerp(1, 0, elapsedTime / _shakeDuration);
            transform.localPosition = startingPosition + (Vector3)Random.insideUnitCircle * magnitude * dampenFactor;
            yield return(null);
        }
        transform.localPosition = startingPosition;
        _lastShake = null;
    }
Esempio n. 4
0
    private float GetMagnitude(ShakeStrength strength)
    {
        switch (strength)
        {
        case (ShakeStrength.NONE):
            return(0);

        case (ShakeStrength.WEAK):
            return(_shakeMagnitude * (1 - _strengthDelta));

        case (ShakeStrength.MEDIUM):
            return(_shakeMagnitude);

        case (ShakeStrength.STRONG):
            return(_shakeMagnitude * (1 + _strengthDelta));
        }
        return(_shakeMagnitude);
    }