57 lines
1.5 KiB
C#
57 lines
1.5 KiB
C#
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{}
|
|
/// <summary>
|
|
/// 智能目标传感器,根据条件,智能选择目标
|
|
/// </summary>
|
|
public class SmartTargetSensor :StateBasedMonoBehaviour<ISmartTargetState>,ISensor
|
|
{
|
|
[SerializeField] private float radius;
|
|
[SerializeField] private RangeSensor rangeSensor;
|
|
[SerializeField] private AudioSensor audioSensor;
|
|
public int Id { get; set; }
|
|
private readonly CacheList<Transform> _detected=new();
|
|
public HashSet<int> Ignores { get; } = new();
|
|
private void OnEnable()
|
|
{
|
|
Id = GetInstanceID();
|
|
SensorQueue.Register(Id,this);
|
|
}
|
|
private void Start()
|
|
{
|
|
TransitionState<Idle>();
|
|
}
|
|
private void OnDisable()
|
|
{
|
|
SensorQueue.UnRegister(Id);
|
|
}
|
|
public IEnumerable<Transform> Get() => _detected.ValueArray;
|
|
public bool IsValid(Collider _collider) => false;
|
|
public float GetDistance() => radius;
|
|
public UniTask Execute(float delta)
|
|
{
|
|
CurrentState?.OnStateUpdate(delta);
|
|
return UniTask.CompletedTask;
|
|
}
|
|
}
|
|
}
|