private bool IsHitsContainingCollider(BoxCastInfo info, Collider2D collider) { for (int i = 0; i < info.hits.Count; i++) { if (info.hits.Contains(collider)) { return(true); } } return(false); }
private bool IsHitsContainingCollider(List <BoxCastInfo> infos, Collider2D collider) { for (int i = 0; i < infos.Count; i++) { BoxCastInfo info = infos[i]; if (IsHitsContainingCollider(info, collider)) { return(true); } } return(false); }
private bool IsEvaluateHitsCollisionType(List <BoxCastInfo> infos, CollisionFilter filter) { for (int i = 0; i < infos.Count; i++) { BoxCastInfo info = infos[i]; if (IsEvaluateHitsCollisionType(info, filter)) { return(true); } } return(false); }
private bool IsEvaluateHitsCollisionType(BoxCastInfo info, CollisionFilter filter) { for (int i = 0; i < info.hits.Count; i++) { Collider2D hit = info.hits[i]; if (!hit.isTrigger && filter == CollisionFilter.OnlyNonTrigger) { return(true); } else if (hit.isTrigger && filter == CollisionFilter.OnlyTrigger) { return(true); } else if (filter == CollisionFilter.Both) { return(info.hits.Count != 0); } } return(false); }
/// <summary> /// Cast the boxes, it is recommended to only update the hits when Unity events like OnCollisionEnter2D happens. /// </summary> public void UpdateHits() { for (int i = 0; i < boxCastInfos.Count; i++) { BoxCastInfo info = boxCastInfos[i]; //info.hits.Clear(); switch (info.direction) { case Direction.Up: info._origin = new Vector2(referenceCollider.bounds.center.x, referenceCollider.bounds.max.y) + info.offset; info._size = new Vector2(referenceCollider.size.x * info.referenceSizeMultiplier, 1f * info.directionSizeMultiplier); info._castDirection = Vector2.up; break; case Direction.Down: info._origin = new Vector2(referenceCollider.bounds.center.x, referenceCollider.bounds.min.y) + info.offset; info._size = new Vector2(referenceCollider.size.x * info.referenceSizeMultiplier, 1f * info.directionSizeMultiplier); info._castDirection = Vector2.down; break; case Direction.Left: info._origin = new Vector2(referenceCollider.bounds.min.x, referenceCollider.bounds.center.y) + info.offset; info._size = new Vector2(1f * info.directionSizeMultiplier * info.referenceSizeMultiplier, referenceCollider.size.y); info._castDirection = Vector2.left; break; case Direction.Right: info._origin = new Vector2(referenceCollider.bounds.max.x, referenceCollider.bounds.center.y) + info.offset; info._size = new Vector2(1f * info.directionSizeMultiplier * info.referenceSizeMultiplier, referenceCollider.size.y); info._castDirection = Vector2.right; break; } int hitCount = Physics2D.BoxCastNonAlloc(info.origin, info.size, 0f, info.castDirection, _hitBuffer, info.distance, layerMask); for (int a = 0; a < hitCount; a++) { // Filter the hits here if (boxCastMask.Contains(_hitBuffer[a].collider)) { continue; } // Call hit callback if (!info.hits.Contains(_hitBuffer[a].collider)) { OnHit(info.direction, _hitBuffer[a], _hitBuffer[a].collider); } } info.hits.Clear(); for (int a = 0; a < hitCount; a++) { // Filter the hits here if (boxCastMask.Contains(_hitBuffer[a].collider)) { continue; } // Add the hit to the buffer info.hits.Add(_hitBuffer[a].collider); } } }