using PixelCrushers; using System; using System.Collections; using System.Collections.Generic; using UnityEngine; namespace Beyond { public abstract class StreamingAsset : MonoBehaviour { public static readonly string LAYER_NAME = "Triggers"; public Action OnVolume; [Header("Detection")] public LayerMask collisionLayer = 1 << 8; public TagMask tagMask = new TagMask(); protected new Collider collider; protected bool playerIn; [SerializeField] protected bool startVolumeState; [SerializeField] protected float deactivateDelay; protected Coroutine deactivation = null; public bool IsVolumeActive { get; private set; } public bool PlayerIn { get => playerIn; set => playerIn = value; } [Header("Debug")] [SerializeField] protected bool draw; [SerializeField] protected bool drawWire; [SerializeField] protected Color drawColor = new Color(1f, 1f, 1f, 0.4f); [SerializeField] protected Color drawWireColor = Color.white; [SerializeField] protected Color activeVolumeColor = new Color(1f, 0f, 1f, 0.4f); [SerializeField] protected Color activeVolumeWireColor = Color.magenta; protected virtual void Awake() { collider = GetComponent(); collider.isTrigger = true; gameObject.layer = LayerMask.NameToLayer(LAYER_NAME); } protected virtual void Start() { SetActive(startVolumeState); } protected void SetActive(bool isActive) { if (!isActive && deactivateDelay != 0f) { Debug.Log("Start deactivateDelay Coroutine"); deactivation = StartCoroutine(SetActiveDelay(isActive)); } else { SetActiveVolume(isActive); } } private IEnumerator SetActiveDelay(bool isActive) { yield return new WaitForSeconds(deactivateDelay); SetActiveVolume(isActive); deactivation = null; } private void SetActiveVolume(bool isActive) { if (IsVolumeActive != isActive) { playerIn = isActive; IsVolumeActive = isActive; OnVolume?.Invoke(); } } protected void OnDrawGizmos() { if (draw) { Gizmos.color = drawColor; if (playerIn) { Gizmos.color = activeVolumeColor; } Draw(); } if (drawWire) { Gizmos.color = drawWireColor; if (playerIn) { Gizmos.color = activeVolumeColor; } DrawWire(); } } protected abstract void DrawWire(); protected abstract void Draw(); protected abstract void OnTriggerEnter(Collider other); protected abstract void OnTriggerExit(Collider other); } }