Example #1
0
        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);
        }