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