public Boolean LineToBoxIsBlocked(Vector3 startPoint, OrientedBoundingBox targetBox) { try { if (targetBox.Corners.Any(t => GridBlocks.GetBlocksInLine(startPoint, t).Count > 0)) { if (GridBlocks.GetBlocksInLine(startPoint, targetBox.Origin).Count > 0) { return(true); } } GridBlockCollection gridBlockCollection = GridBlocks.GetBlocksAroundLine(startPoint, targetBox.Origin); foreach (GridBlock gridBlock in gridBlockCollection) { if (gridBlock.LowBoxTile != null) { foreach (TileBlock tileBlock in gridBlock.LowBoxTile.TileBlocks) { if (tileBlock.TopBoundingBox != null) { if (tileBlock.TopBoundingBox.LineInBox(startPoint, targetBox.Origin)) { return(true); } } if (tileBlock.BottomBoundingBox != null) { if (tileBlock.BottomBoundingBox.LineInBox(startPoint, targetBox.Origin)) { return(true); } } } } } } catch (Exception) { return(true); } return(false); }