using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using BITKit.Sensors.States; using BITKit.StateMachine; using Cysharp.Threading.Tasks; #if UNITY_EDITOR using UnityEditor; using UnityEditor.UIElements; #endif using UnityEngine; using UnityEngine.Accessibility; using UnityEngine.Profiling; using UnityEngine.UIElements; // ReSharper disable PossibleMultipleEnumeration namespace BITKit.Sensors { public interface ISmartTargetProperty{} public interface ISmartTargetState:IState{} /// /// 智能目标传感器,根据条件,智能选择目标 /// public class SmartTargetSensor :StateBasedMonoBehaviour,ISensor { [SerializeField] private float radius; [SerializeField] private RangeSensor rangeSensor; [SerializeField] private AudioSensor audioSensor; public int Id { get; set; } private readonly CacheList _detected=new(); public HashSet Ignores { get; } = new(); private void OnEnable() { Id = GetInstanceID(); SensorQueue.Register(Id,this); } private void Start() { TransitionState(); } private void OnDisable() { SensorQueue.UnRegister(Id); } public IEnumerable Get() => _detected.ValueArray; public bool IsValid(Collider _collider) => false; public float GetDistance() => radius; public UniTask Execute(float delta) { CurrentState?.OnStateUpdate(delta); return UniTask.CompletedTask; } } }