using System; 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 bool autoUpdate; [SerializeField]private float radius; private readonly CacheList cache = new(); private void OnEnable() { Id = GetInstanceID(); SensorQueue.Register(Id,this); } private void OnDisable() { SensorQueue.UnRegister(Id); } 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; 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; public bool AutoUpdate=>autoUpdate; } }