138 lines
3.5 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|
|
}
|