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