using System; using System.Collections; using UnityEngine; internal class FollowerCamera : MonoBehaviour { public MonoBehaviour Target; public Vector2 Offset; public bool Locked; public float shakeAmount; public float shakePeriod = 1f; public void FixedUpdate() { if (this.Target && !this.Locked) { base.transform.position = Vector3.Lerp(base.transform.position, this.Target.transform.position + this.Offset, 5f * Time.deltaTime); if (this.shakeAmount > 0f) { float num = Mathf.PerlinNoise(0.5f, Time.time * this.shakePeriod) * 2f - 1f; float num2 = Mathf.PerlinNoise(Time.time * this.shakePeriod, 0.5f) * 2f - 1f; base.transform.Translate(num * this.shakeAmount, num2 * this.shakeAmount, 0f); } } } public void ShakeScreen(float duration, float severity) { base.StartCoroutine(this.CoShakeScreen(duration, severity)); } private IEnumerator CoShakeScreen(float duration, float severity) { WaitForFixedUpdate wait = new WaitForFixedUpdate(); for (float t = duration; t > 0f; t -= Time.fixedDeltaTime) { float d = t / duration; this.Offset = UnityEngine.Random.insideUnitCircle * d * severity; yield return wait; } this.Offset = Vector2.zero; yield break; } internal void SetTarget(MonoBehaviour target) { this.Target = target; base.transform.position = this.Target.transform.position + this.Offset; } }