BITFALL/Assets/BITKit/Unity/Scripts/Sensor/AudioSensor.cs

39 lines
1.3 KiB
C#
Raw Normal View History

2023-06-08 14:09:50 +08:00
using System.Collections;
using System.Collections.Generic;
using Cysharp.Threading.Tasks;
using UnityEngine;
using UnityEngine.Pool;
using System.Linq;
2024-04-15 14:57:50 +08:00
using UnityEditor.Search;
2023-06-08 14:09:50 +08:00
namespace BITKit.Sensors
{
public interface IAudioObject
{
float GetVolume();
}
2024-04-15 14:57:50 +08:00
public class AudioSensor : MonoBehaviour,ISensor
2023-06-08 14:09:50 +08:00
{
[Header(Constant.Header.Settings)]
2024-04-15 14:57:50 +08:00
[SerializeField]private float radius;
[SerializeField] private Optional<string[]> ignoreTags;
private readonly CacheList<Transform> cache = new();
public UniTask Execute(float delta)
2023-06-08 14:09:50 +08:00
{
2024-04-15 14:57:50 +08:00
var position = transform.position;
cache.Clear();
foreach (var x in AudioSensorService.QuadtreeRoot.Find(new Bounds(position, Vector3.one * radius)))
2023-06-08 14:09:50 +08:00
{
2024-04-15 14:57:50 +08:00
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);
2023-06-08 14:09:50 +08:00
}
return UniTask.CompletedTask;
}
2024-04-15 14:57:50 +08:00
public int Id { get; set; }
public IEnumerable<Transform> Get() => cache.ValueArray;
public bool IsValid(Collider _collider) => false;
public float GetDistance() => radius;
2023-06-08 14:09:50 +08:00
}
}