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;
}
}
}