add kcp
This commit is contained in:
18
Src/Unity/Scripts/Sensor/MixSensor.cs
Normal file
18
Src/Unity/Scripts/Sensor/MixSensor.cs
Normal file
@@ -0,0 +1,18 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using UnityEngine;
|
||||
|
||||
namespace BITKit.Sensors
|
||||
{
|
||||
public class MixSensor : Sensor
|
||||
{
|
||||
[SerializeReference, SubclassSelector] private ISensor[] sensors;
|
||||
public override IEnumerable<Transform> Get()=>sensors.SelectMany(x => x.Get());
|
||||
public override bool IsValid(Collider _collider) => sensors.Any(x => x.IsValid(_collider) is false) is false;
|
||||
public override float GetDistance() => sensors.Min(x => x.GetDistance());
|
||||
public override UniTask Execute() => UniTask.WhenAll(sensors.Select(x => x.Execute()));
|
||||
}
|
||||
|
||||
}
|
11
Src/Unity/Scripts/Sensor/MixSensor.cs.meta
Normal file
11
Src/Unity/Scripts/Sensor/MixSensor.cs.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8b7c7e7c8cf1efe4aac0c8eddbd05e1c
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -19,6 +19,7 @@ namespace BITKit.Sensors
|
||||
[SerializeField] private Optional<LayerMask> detectedLayer;
|
||||
[SerializeField] private bool allowStatic;
|
||||
[SerializeField] private bool useRigidbody;
|
||||
[SerializeField] private bool immediately = false;
|
||||
|
||||
[Header(Constant.Header.Events)] public UnityEvent<Collider> onDetected = new();
|
||||
public UnityEvent<Collider> onLost = new();
|
||||
@@ -29,14 +30,17 @@ namespace BITKit.Sensors
|
||||
|
||||
private readonly Queue<Collider> triggerEnterQueue=new();
|
||||
private readonly Queue<Collider> triggerExitQueue=new();
|
||||
private bool diagnosisNextFrame;
|
||||
|
||||
private void OnTriggerEnter(Collider _collider)
|
||||
{
|
||||
triggerEnterQueue.Enqueue(_collider);
|
||||
if(immediately)Rebuild();
|
||||
}
|
||||
private void OnTriggerExit(Collider _collider)
|
||||
{
|
||||
triggerExitQueue.Enqueue(_collider);
|
||||
if(immediately)Rebuild();
|
||||
}
|
||||
|
||||
private void OnCollisionEnter(Collision collision)
|
||||
@@ -83,11 +87,19 @@ namespace BITKit.Sensors
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
if (immediately is false)
|
||||
{
|
||||
Rebuild();
|
||||
}
|
||||
}
|
||||
|
||||
private void Rebuild()
|
||||
{
|
||||
while (triggerEnterQueue.TryDequeue(out var _collider))
|
||||
{
|
||||
if (IsValid(_collider) is false) return;
|
||||
if (triggerExitQueue.Contains(_collider) || detected.Contains(_collider))continue;
|
||||
if (detected.Contains(_collider))continue;
|
||||
detected.Add(_collider);
|
||||
}
|
||||
while (triggerExitQueue.TryDequeue(out var _collider))
|
||||
@@ -95,6 +107,14 @@ namespace BITKit.Sensors
|
||||
if (IsValid(_collider) is false) return;
|
||||
detected.Remove(_collider);
|
||||
}
|
||||
|
||||
diagnosisNextFrame = detected.Any(x =>x is not null &&x.enabled is false);
|
||||
|
||||
if (diagnosisNextFrame)
|
||||
{
|
||||
detected = detected.Where(x => x.enabled).ToList();
|
||||
diagnosisNextFrame = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
#if UNITY_EDITOR
|
||||
|
Reference in New Issue
Block a user