using System; using UltimateWater; using UnityEngine; public class FreeCamera : MonoBehaviour { [HideInInspector] public Camera camera; public AudioSource underwaterAudio; private bool isUnderWater; public static event Action OnEnterUnderwater; public static event Action OnExitUnderwater; private void Start() { camera = GetComponent(); underwaterAudio.Stop(); } private void OnDestroy() { if (isUnderWater) { isUnderWater = false; FreeCamera.OnExitUnderwater?.Invoke(); } } private void Update() { if (GameWaterSystem.IsPositionUnderWater(base.transform.position)) { if (!isUnderWater) { isUnderWater = true; camera.cullingMask |= 1 << LayerMask.NameToLayer("UnderwaterObject"); underwaterAudio.Play(); EnableDisableAllAudioOnScene(val: false); GetComponent().enabled = false; FreeCamera.OnEnterUnderwater?.Invoke(); } } else if (isUnderWater) { isUnderWater = false; camera.cullingMask &= ~(1 << LayerMask.NameToLayer("UnderwaterObject")); underwaterAudio.Stop(); EnableDisableAllAudioOnScene(val: true); GetComponent().enabled = true; FreeCamera.OnExitUnderwater?.Invoke(); } } private void EnableDisableAllAudioOnScene(bool val) { AudioSource[] array = UnityEngine.Object.FindObjectsOfType(); for (int i = 0; i < array.Length; i++) { if (underwaterAudio != array[i]) { array[i].enabled = val; } } } }