Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        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);
        }
Example #4
0
        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);
        }
Example #5
0
        /// <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);
                }
            }
        }