private void ShakeCamera(ShakeStrength force) { _currentStrength = force; _isShaking = true; _originalPosition = transform.position; _currentShakeTime = 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); }
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; }
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); }