/// <summary> /// Shake function used by all public shake functions. /// </summary> private void Shake(GameObject target, float strength, float smoothness, float easeInTime, float upTime, float easeOutTime) { if (m_Shakes == null) { m_Shakes = new Dictionary <GameObject, ShakeInformation>(); } ShakeInformation newShake = new ShakeInformation(); newShake.OriginalPosition = UseLocalPosition ? target.transform.localPosition : target.transform.position; newShake.OriginalRotation = UseLocalRotation ? target.transform.localEulerAngles : target.transform.eulerAngles; newShake.Strength = strength; newShake.Smoothness = smoothness; newShake.EaseInTime = easeInTime; newShake.UpTime = upTime; newShake.EaseOutTime = easeOutTime; newShake.Delta = 0.0f; if (m_Shakes != null && m_Shakes.ContainsKey(target) && m_Shakes[target].TotalTime() > newShake.TotalTime()) { return; } else if (m_Shakes.ContainsKey(target)) { m_Shakes.Remove(target); } m_Shakes.Add(target, newShake); }
/// <summary> /// Forces the given object to stop shaking with a given ease out. /// </summary> public void EndShake(GameObject target, float easeOutTime) { if (m_Shakes == null) { m_Shakes = new Dictionary <GameObject, ShakeInformation>(); } if (m_Shakes.ContainsKey(target)) { ShakeInformation info = m_Shakes[target]; info.UpTime = 0.0f; info.EaseOutTime = easeOutTime; m_Shakes[target] = info; } else { Debug.LogWarning("ScreenShake : Trying to end a non-existing shake."); } }