using System.Collections; using System.Collections.Generic; using Cysharp.Threading.Tasks; using UnityEngine; using UnityEngine.Pool; using System.Linq; using UnityEditor.Search; namespace BITKit.Sensors { public interface IAudioObject { float GetVolume(); } public class AudioSensor : MonoBehaviour,ISensor { [Header(Constant.Header.Settings)] [SerializeField]private float radius; [SerializeField] private Optional ignoreTags; private readonly CacheList cache = new(); public UniTask Execute(float delta) { var position = transform.position; cache.Clear(); foreach (var x in AudioSensorService.QuadtreeRoot.Find(new Bounds(position, Vector3.one * radius))) { var distance = Vector3.Distance(position, x.Position); if(distance>radius) continue; if(ignoreTags.Allow && x.Tag is { } tag1 && tag1.GetTags().Any(ignoreTags.Value.Contains)) continue; cache.Add(x.Transform); } return UniTask.CompletedTask; } public int Id { get; set; } public IEnumerable Get() => cache.ValueArray; public bool IsValid(Collider _collider) => false; public float GetDistance() => radius; } }