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