private void ScheduleShake(Magnitude _magnitude = Magnitude.Medium, EndingMagnitude endingMagnitude = EndingMagnitude.Fourth, int numberOfShakes = 1)
        {
            if (camera != null)
            {
                remainingShakes = numberOfShakes;
                magnitude       = (float)_magnitude * 0.005f;

                int   numberOfDegradationsPerSingleShake = 2;
                float endingMagnitudeFloat    = (float)((float)endingMagnitude * 0.005f) * magnitude;
                float totalMagnitudeToDegrade = magnitude - endingMagnitudeFloat;
                degradationPerShake = totalMagnitudeToDegrade / ((numberOfDegradationsPerSingleShake * remainingShakes) - 1);

                PerformSingleShake();
            }
        }
        public void ShakeForDuration(Magnitude _magnitude = Magnitude.Small, float duration = 5.0f, EndingMagnitude endingMagnitude = EndingMagnitude.Fourth)
        {
            isShakeForever = false;
            int numberOfShakes = (int)(duration / durationPerShake);

            ScheduleShake(_magnitude, endingMagnitude, numberOfShakes);
        }
 public void Shake(Magnitude _magnitude = Magnitude.Medium, EndingMagnitude endingMagnitude = EndingMagnitude.Fourth)
 {
     Stop();
     isShakeForever = false;
     ScheduleShake(_magnitude, endingMagnitude, 1);
 }