Files
beyond/Assets/Scripts/Optimization/EventVolume.cs
2024-11-20 15:21:28 +01:00

138 lines
3.5 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
namespace Beyond
{
public class EventVolume : MonoBehaviour
{
[SerializeField]
private List<StreamingAsset> streamingVolume = new List<StreamingAsset>();
private int activeVolumesCount;
[SerializeField]
private List<StreamingAsset> forceCloseVolume = new List<StreamingAsset>();
private int activeForceCloseVolumesCount;
private Activator activator;
private bool isActive;
private bool firstTimeTriggered;
public List<StreamingAsset> ForceCloseVolume { get => forceCloseVolume; set => forceCloseVolume = value; }
private void Awake()
{
activator = GetComponentInChildren<Activator>();
AssignToEvent();
}
private void Start()
{
if (!firstTimeTriggered)
{
OnVolume();
}
}
private void OnDestroy()
{
if (streamingVolume != null)
{
foreach (var item in streamingVolume)
{
if (item != null)
{
item.OnVolume -= OnVolume;
}
}
}
if (forceCloseVolume != null)
{
foreach (var item in forceCloseVolume)
{
if (item != null)
{
item.OnVolume -= OnVolume;
}
}
}
}
public void AssignToEvent()
{
if (streamingVolume != null)
{
foreach (var item in streamingVolume)
{
if (item != null)
{
item.OnVolume += OnVolume;
}
}
}
if (forceCloseVolume != null)
{
foreach (var item in forceCloseVolume)
{
if (item != null)
{
item.OnVolume += OnVolume;
}
}
}
}
private int GetCountOfActiveVolumes()
{
int count = 0;
for (int i = 0; i < streamingVolume.Count; i++)
{
if (streamingVolume[i].IsVolumeActive)
{
count++;
}
}
return count;
}
private int GetCountOfActiveForceCloseVolumes()
{
int count = 0;
for (int i = 0; i < forceCloseVolume.Count; i++)
{
if (forceCloseVolume[i] != null && forceCloseVolume[i].IsVolumeActive)
{
count++;
}
}
return count;
}
private void OnVolume()
{
firstTimeTriggered = true;
activeVolumesCount = GetCountOfActiveVolumes();
activeForceCloseVolumesCount = GetCountOfActiveForceCloseVolumes();
if (activeForceCloseVolumesCount > 0)
{
isActive = false;
}
else if (activeVolumesCount > 0)
{
isActive = true;
}
else
{
isActive = false;
}
if (activator != null)
{
activator.SetActive(isActive);
}
}
}
}