public static bool Cast(IPhysicsGeom geom, Vector3 dir, float dist, int layerMask)
        {
            if (geom == null) throw new System.ArgumentNullException("geom");

            RaycastHit hit;
            return geom.Cast(dir, out hit, dist, layerMask);
        }
        public static bool Cast(IPhysicsGeom geom, Vector3 dir)
        {
            if (geom == null) throw new System.ArgumentNullException("geom");

            RaycastHit hit;
            return geom.Cast(dir, out hit, float.PositiveInfinity, Physics.AllLayers);
        }
        public static bool Cast(IPhysicsGeom geom, Vector3 dir, out RaycastHit hitInfo, float dist, QueryTriggerInteraction query = QueryTriggerInteraction.UseGlobal)
        {
            if (geom == null) throw new System.ArgumentNullException("geom");

            return geom.Cast(dir, out hitInfo, dist, Physics.AllLayers, query);
        }
 public static int OverlapGeom(IPhysicsGeom geom, IList<Collider> results, int layerMask = Physics.AllLayers, QueryTriggerInteraction query = QueryTriggerInteraction.UseGlobal)
 {
     if (geom == null) throw new System.ArgumentNullException("geom");
     
     return geom.Overlap(results, layerMask, query);
 }
 public static bool RadialCast(IPhysicsGeom geom, ICollection <RaycastHit> results, float dist, int detail, int layerMask, QueryTriggerInteraction query = QueryTriggerInteraction.UseGlobal)
 {
     return(RadialCast(geom, results, dist, detail, layerMask, Vector2.right, query));
 }
 public static RaycastHit[] RadialCast(IPhysicsGeom geom, float dist, int detail, int layerMask, QueryTriggerInteraction query = QueryTriggerInteraction.UseGlobal)
 {
     return(RadialCast(geom, dist, detail, layerMask, Vector2.right, query));
 }
        public static bool CheckGeom(IPhysicsGeom geom)
        {
            if (geom == null) throw new System.ArgumentNullException("geom");

            if (geom is Sphere)
            {
                var s = (Sphere)geom;
                return Physics.CheckSphere(s.Center, s.Radius);
            }
            else if (geom is Capsule)
            {
                var c = (Capsule)geom;
                return Physics.CheckCapsule(c.Start, c.End, c.Radius);
            }
            else
            {
                return geom.TestOverlap(Physics.AllLayers);
            }
        }
        public static RaycastHit[] CastAll(IPhysicsGeom geom, Vector3 dir, float dist, int layerMask)
        {
            if (geom == null) throw new System.ArgumentNullException("geom");

            return geom.CastAll(dir, dist, layerMask).ToArray();
        }
        public static RaycastHit[] CastAll(IPhysicsGeom geom, Vector3 dir)
        {
            if (geom == null) throw new System.ArgumentNullException("geom");

            return geom.CastAll(dir, float.PositiveInfinity, Physics.AllLayers).ToArray();
        }
        public static bool Cast(IPhysicsGeom geom, Vector3 dir, out RaycastHit hitInfo, float dist)
        {
            if (geom == null) throw new System.ArgumentNullException("geom");

            return geom.Cast(dir, out hitInfo, dist, Physics.AllLayers);
        }
        public static IEnumerable<RaycastHit> RadialCast(IPhysicsGeom geom, float dist, int detail, int layerMask, Vector2 initialAxis)
        {
            if (VectorUtil.NearZeroVector(initialAxis))
                initialAxis = Vector2.right;
            else
                initialAxis.Normalize();
            var a = 360f / (float)detail;

            for (int i = 0; i < detail; i++)
            {
                var v = VectorUtil.RotateBy(initialAxis, a * i);
                foreach (var h in geom.CastAll(v, dist, layerMask))
                {
                    yield return h;
                }
            }
        }
 public static IEnumerable<RaycastHit> RadialCast(IPhysicsGeom geom, float dist, int detail, int layerMask)
 {
     return RadialCast(geom, dist, detail, layerMask, Vector2.right);
 }
        public static Collider[] OverlapGeom(IPhysicsGeom geom, int layerMask)
        {
            if (geom == null) throw new System.ArgumentNullException("geom");

            return geom.Overlap(layerMask).ToArray();
        }