Exemple #1
0
    public static bool BoxCast2D(ref EHRect2D BoxToCast, EHBaseCollider2D.EColliderType ColliderType, out EHBaseCollider2D HitCollider, int LayerMask = 0)
    {
        if (CachedInstance == null)
        {
            Debug.LogWarning("Game Overseer not initialized");
            HitCollider = null;
            return(false);
        }
        if (!CachedInstance.ColliderComponentDictionary.ContainsKey(ColliderType))
        {
            HitCollider = null;
            return(false);
        }

        foreach (EHBaseCollider2D Collider in CachedInstance.ColliderComponentDictionary[ColliderType])
        {
            if (Collider.gameObject.activeInHierarchy && (LayerMask & 1 << Collider.gameObject.layer) != 0)
            {
                if (Collider.IsOverlappingRect2D(BoxToCast))
                {
                    HitCollider = Collider;
                    return(true);
                }
            }
        }
        HitCollider = null;
        return(false);
    }
Exemple #2
0
    /// <summary>
    /// Returns a list of all colliders that are intersected
    /// </summary>
    /// <param name="BoxToCast"></param>
    /// <param name="ColliderType"></param>
    /// <param name="HitColliderList"></param>
    /// <param name="LayerMask"></param>
    /// <returns></returns>
    public static bool BoxCastAll2D(ref EHRect2D BoxToCast, EHBaseCollider2D.EColliderType ColliderType, out EHBaseCollider2D[] HitColliderList, int LayerMask)
    {
        if (CachedInstance == null)
        {
            Debug.LogWarning("The game overseer has not been initialized");
            HitColliderList = null;
            return(false);
        }
        List <EHBaseCollider2D> BaseColliderList = new List <EHBaseCollider2D>();

        foreach (EHBaseCollider2D Collider2D in CachedInstance.ColliderComponentDictionary[ColliderType])
        {
            if (Collider2D.gameObject.activeInHierarchy && (LayerMask & 1 << Collider2D.gameObject.layer) != 0)
            {
                if (Collider2D.IsOverlappingRect2D(BoxToCast))
                {
                    BaseColliderList.Add(Collider2D);
                }
            }
        }

        HitColliderList = BaseColliderList.ToArray();
        if (BaseColliderList.Count > 0)
        {
            return(true);
        }

        return(false);
    }
Exemple #3
0
    public static bool RayTrace2D(ref EHRayTraceParams Params, EHBaseCollider2D.EColliderType ColliderType, out EHRayTraceHit RayHit, int LayerMask = 0, bool DebugDraw = false)
    {
        if (!CachedInstance.ColliderComponentDictionary.ContainsKey(ColliderType))
        {
            RayHit = default;
            return(false);
        }

        bool  bCollisionMade  = false;
        float ClosestDistance = -1;

        RayHit = default;
        EHRayTraceHit TempRayHit;

        foreach (EHBaseCollider2D Collider in CachedInstance.ColliderComponentDictionary[ColliderType])
        {
            if (Collider.IsRayTraceOverlapping(ref Params, out TempRayHit))
            {
                float CollisionDistance = Vector2.Distance(Params.RayOrigin, TempRayHit.HitPoint);
                if (!bCollisionMade || ClosestDistance > CollisionDistance)
                {
                    ClosestDistance = CollisionDistance;
                    RayHit          = TempRayHit;
                    bCollisionMade  = true;
                }
            }
        }

#if UNITY_EDITOR
        if (DebugDraw)
        {
            EHDebug.RayTraceDrawLine(Params, bCollisionMade ? Color.red : Color.yellow);
        }
#endif

        return(bCollisionMade);
    }