using System; using System.Collections; using System.Collections.Generic; using Cysharp.Threading.Tasks; using kcp2k; using Quadtree; using Quadtree.Items; using UnityEngine; using UnityEngine.Pool; namespace BITKit.Sensors { public class AudioSensorService : MonoBehaviour { public class AudioSensorData:IItem> { public int Id; public Vector3 Position; public float Radius; public Transform Transform; public Bounds Bounds; public ITag Tag; public Bounds GetBounds() => Bounds; public Node ParentNode { get; set; } public void QuadTree_Root_Initialized(IQuadtreeRoot> root){} } internal static readonly QuadtreeRoot> QuadtreeRoot = new(default, Vector3.one * 2048); private static Pool pool = new(()=>new(), x=>{}, 1000); private static int count; public static async void MakeNoise(Vector3 position,Transform transform) { var data = pool.Take(); data.Id = count++; data.Position = position; data.Transform = transform; data.Bounds = new Bounds(position, Vector3.one *1); data.Tag = transform.GetComponent(); QuadtreeRoot.Insert(data); await UniTask.Delay(3000); if (disposed) return; QuadtreeRoot.Remove(data); pool.Return(data); } private static bool disposed; [SerializeReference, SubclassSelector] private ITicker ticker; private void Start() { disposed = false; ticker.Add(OnTick); destroyCancellationToken.Register(Dispose); pool.Clear(); } private void Dispose() { ticker.Remove(OnTick); disposed = true; QuadtreeRoot.Clear(); } private void OnTick(float obj) { } } }