public int TotalCornersInBound(WallsBounds pBoundsToCheck)
        {
            int nCornersIntersecting = 0;

            //TopLeft
            if (IsCornerInBound(new Vector3(-1, 0, 1), pBoundsToCheck))
            {
                nCornersIntersecting++;
            }
            //Top Right
            if (IsCornerInBound(new Vector3(1, 0, 1), pBoundsToCheck))
            {
                nCornersIntersecting++;
            }
            //Bottom Left
            if (IsCornerInBound(new Vector3(-1, 0, -1), pBoundsToCheck))
            {
                nCornersIntersecting++;
            }
            //Bottom Right
            if (IsCornerInBound(new Vector3(1, 0, -1), pBoundsToCheck))
            {
                nCornersIntersecting++;
            }

            return(nCornersIntersecting);
        }
    public static WallsBounds BoxColliderToWallbounds(Vector3 pPosition, BoxCollider pWallCollider)
    {
        WallsBounds newWallBounds = new WallsBounds();
        Vector3     extends       = pWallCollider.bounds.extents;

        newWallBounds.center    = pPosition;
        newWallBounds.minWallsX = newWallBounds.center.x - extends.x;
        newWallBounds.maxWallsX = newWallBounds.center.x + extends.x;
        newWallBounds.minWallsZ = newWallBounds.center.z - extends.z;
        newWallBounds.maxWallsZ = newWallBounds.center.z + extends.z;


        return(newWallBounds);
    }
 public bool IsCornerInBound(Vector3 pCorner, WallsBounds pBoundsToCheck)
 {
     if (pCorner.z == 1)     //Top side
     {
         if (pCorner.x == 1) //Top right
         {
             if (maxWallsX > pBoundsToCheck.minWallsX && maxWallsX < pBoundsToCheck.maxWallsX && maxWallsZ < pBoundsToCheck.maxWallsZ && maxWallsZ > pBoundsToCheck.minWallsZ)
             {
                 return(true);
             }
         }
         else // Top left
         {
             if (minWallsX > pBoundsToCheck.minWallsX && minWallsX < pBoundsToCheck.maxWallsX && maxWallsZ < pBoundsToCheck.maxWallsZ && maxWallsZ > pBoundsToCheck.minWallsZ)
             {
                 return(true);
             }
         }
     }
     else //bottom side
     {
         if (pCorner.x == 1) //bottom right
         {
             if (maxWallsX > pBoundsToCheck.minWallsX && maxWallsX < pBoundsToCheck.maxWallsX && minWallsZ < pBoundsToCheck.maxWallsZ && minWallsZ > pBoundsToCheck.minWallsZ)
             {
                 return(true);
             }
         }
         else // bottom left
         {
             if (minWallsX > pBoundsToCheck.minWallsX && minWallsX < pBoundsToCheck.maxWallsX && minWallsZ < pBoundsToCheck.maxWallsZ && minWallsZ > pBoundsToCheck.minWallsZ)
             {
                 return(true);
             }
         }
     }
     return(false);
 }
 public static WallsBounds ExtendWallBounds(WallsBounds boundsToExtend, WallsBounds boundsReference)
 {
     if (boundsReference.minWallsX < boundsToExtend.minWallsX)
     {
         boundsToExtend.center.x -= (boundsToExtend.minWallsX - boundsReference.minWallsX) / 2;
         boundsToExtend.minWallsX = boundsReference.minWallsX;
     }
     if (boundsReference.minWallsZ < boundsToExtend.minWallsZ)
     {
         boundsToExtend.center.z -= (boundsToExtend.minWallsZ - boundsReference.minWallsZ) / 2;
         boundsToExtend.minWallsZ = boundsReference.minWallsZ;
     }
     if (boundsReference.maxWallsX > boundsToExtend.maxWallsX)
     {
         boundsToExtend.center.x -= (boundsToExtend.maxWallsX - boundsReference.maxWallsX) / 2;
         boundsToExtend.maxWallsX = boundsReference.maxWallsX;
     }
     if (boundsReference.maxWallsZ > boundsToExtend.maxWallsZ)
     {
         boundsToExtend.center.z -= (boundsToExtend.minWallsZ - boundsReference.minWallsZ) / 2;
         boundsToExtend.maxWallsZ = boundsReference.maxWallsZ;
     }
     return(boundsToExtend);
 }