You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
115 lines
3.0 KiB
C#
115 lines
3.0 KiB
C#
using UnityEngine;
|
|
|
|
namespace Fusion.Addons.SimpleKCC
|
|
{
|
|
internal sealed class KCCShapeCastInfo
|
|
{
|
|
public Vector3 Position;
|
|
|
|
public float Radius;
|
|
|
|
public float Height;
|
|
|
|
public float Extent;
|
|
|
|
public Vector3 Direction;
|
|
|
|
public float MaxDistance;
|
|
|
|
public LayerMask LayerMask;
|
|
|
|
public QueryTriggerInteraction TriggerInteraction;
|
|
|
|
public KCCShapeCastHit[] AllHits;
|
|
|
|
public int AllHitCount;
|
|
|
|
public KCCShapeCastHit[] ColliderHits;
|
|
|
|
public int ColliderHitCount;
|
|
|
|
public KCCShapeCastHit[] TriggerHits;
|
|
|
|
public int TriggerHitCount;
|
|
|
|
public KCCShapeCastInfo()
|
|
: this(64)
|
|
{
|
|
}
|
|
|
|
public KCCShapeCastInfo(int maxHits)
|
|
{
|
|
AllHits = new KCCShapeCastHit[maxHits];
|
|
TriggerHits = new KCCShapeCastHit[maxHits];
|
|
ColliderHits = new KCCShapeCastHit[maxHits];
|
|
for (int i = 0; i < maxHits; i++)
|
|
{
|
|
AllHits[i] = new KCCShapeCastHit();
|
|
}
|
|
}
|
|
|
|
public void AddHit(RaycastHit raycastHit)
|
|
{
|
|
if (AllHitCount == AllHits.Length)
|
|
{
|
|
return;
|
|
}
|
|
|
|
KCCShapeCastHit kCCShapeCastHit = AllHits[AllHitCount];
|
|
if (kCCShapeCastHit.Set(raycastHit))
|
|
{
|
|
AllHitCount++;
|
|
if (kCCShapeCastHit.IsTrigger)
|
|
{
|
|
TriggerHits[TriggerHitCount] = kCCShapeCastHit;
|
|
TriggerHitCount++;
|
|
}
|
|
else
|
|
{
|
|
ColliderHits[ColliderHitCount] = kCCShapeCastHit;
|
|
ColliderHitCount++;
|
|
}
|
|
}
|
|
}
|
|
|
|
public void Reset(bool deep)
|
|
{
|
|
Position = default(Vector3);
|
|
Radius = 0f;
|
|
Height = 0f;
|
|
Extent = 0f;
|
|
Direction = default(Vector3);
|
|
MaxDistance = 0f;
|
|
Radius = 0f;
|
|
LayerMask = default(LayerMask);
|
|
TriggerInteraction = QueryTriggerInteraction.Collide;
|
|
AllHitCount = 0;
|
|
ColliderHitCount = 0;
|
|
TriggerHitCount = 0;
|
|
if (deep)
|
|
{
|
|
int i = 0;
|
|
for (int num = AllHits.Length; i < num; i++)
|
|
{
|
|
AllHits[i].Reset();
|
|
}
|
|
}
|
|
}
|
|
|
|
public void DumpHits(KCC kcc)
|
|
{
|
|
if (AllHitCount > 0)
|
|
{
|
|
kcc.Log($"ShapeCast Hits ({AllHitCount})");
|
|
_ = AllHits;
|
|
int i = 0;
|
|
for (int allHitCount = AllHitCount; i < allHitCount; i++)
|
|
{
|
|
KCCShapeCastHit kCCShapeCastHit = AllHits[i];
|
|
kcc.Log($"Collider: {kCCShapeCastHit.Collider.name}, Type: {kCCShapeCastHit.Type}, IsTrigger: {kCCShapeCastHit.IsTrigger}");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|