public GridBlock GetHighestGravityBlock(OrientedBoundingBox boundingBox)
        {
            GridBlockCollection gridBlockCollection = GetBlocksNearBoundingBox(boundingBox);

            for (Int32 i = gridBlockCollection.Count - 1; i > 0; i--)
            {
                if (gridBlockCollection[i].LowBoxTopZ < gridBlockCollection[i - 1].LowBoxTopZ)
                {
                    gridBlockCollection.RemoveAt(i);
                }
                else
                {
                    gridBlockCollection.RemoveAt(i - 1);
                }
            }

            return(gridBlockCollection[0]);
        }
        public GridBlockCollection GetBlocksAroundLine(Vector3 startPoint, Vector3 endPoint)
        {
            GridBlockCollection gridBlockCollection = new GridBlockCollection(false);

            Vector3 currentPoint     = startPoint;
            Vector3 direction        = Vector3.Normalize(endPoint - startPoint);
            Single  originalDistance = Vector3.Distance(currentPoint, endPoint);

            while (Vector3.Distance(startPoint, currentPoint) < originalDistance)
            {
                GridBlock block = GetBlockByLocation(currentPoint.X, currentPoint.Y);

                if (block != null && !gridBlockCollection.Contains(block))
                {
                    gridBlockCollection.Add(block);
                }

                currentPoint += direction;
            }

            for (Int32 i = gridBlockCollection.Count - 1; i >= 0; i--)
            {
                GridBlock block = gridBlockCollection[i];
                if (block == null)
                {
                    continue;
                }

                if (block.ContainerBox == null)
                {
                    continue;
                }
                if (block.ContainerBox.LineInBox(startPoint, endPoint))
                {
                    continue;
                }

                gridBlockCollection.RemoveAt(i);
            }

            return(gridBlockCollection);
        }