70 lines
1.4 KiB
C#
70 lines
1.4 KiB
C#
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<Camera>();
|
|
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<WaterCamera>().enabled = false;
|
|
FreeCamera.OnEnterUnderwater?.Invoke();
|
|
}
|
|
}
|
|
else if (isUnderWater)
|
|
{
|
|
isUnderWater = false;
|
|
camera.cullingMask &= ~(1 << LayerMask.NameToLayer("UnderwaterObject"));
|
|
underwaterAudio.Stop();
|
|
EnableDisableAllAudioOnScene(val: true);
|
|
GetComponent<WaterCamera>().enabled = true;
|
|
FreeCamera.OnExitUnderwater?.Invoke();
|
|
}
|
|
}
|
|
|
|
private void EnableDisableAllAudioOnScene(bool val)
|
|
{
|
|
AudioSource[] array = UnityEngine.Object.FindObjectsOfType<AudioSource>();
|
|
for (int i = 0; i < array.Length; i++)
|
|
{
|
|
if (underwaterAudio != array[i])
|
|
{
|
|
array[i].enabled = val;
|
|
}
|
|
}
|
|
}
|
|
}
|