Beispiel #1
0
        private void GetNeighborBlocks(LineSegment line, IEnumerable <Block> blocks, out Block blockX, out Block blockY, out Orientation orientation)
        {
            blockX      = null;
            blockY      = null;
            orientation = Orientation.Other;
            foreach (var block in blocks)
            {
                var found      = false;
                var blockLines = Polygon.GetBlockLines(block, Layer).Where(item => item.IsSlope);
                foreach (var lineObstacle in blockLines)
                {
                    if (line.Start == lineObstacle.Start && line.End == lineObstacle.End)
                    {
                        found = true;
                    }
                    else if (line.End == lineObstacle.Start && line.Start == lineObstacle.End)
                    {
                        found = true;
                    }
                    if (found)
                    {
                        break;
                    }
                }
                if (!found)
                {
                    continue;
                }
                if (blockX == null)
                {
                    blockX = block;
                }
                else
                {
                    blockY = block;
                    //ok, we have both blocks
                    var isVertical   = line.Direction == Direction.Down || line.Direction == Direction.Up;
                    var isHorizontal = line.Direction == Direction.Left || line.Direction == Direction.Right;

                    if (isVertical)
                    {
                        orientation = Orientation.Vertical;
                        if (blockX.Position.X < blockY.Position.X)
                        {
                            return;
                        }
                    }
                    if (isHorizontal)
                    {
                        orientation = Orientation.Horizontal;
                        if (blockX.Position.Y < blockY.Position.Y)
                        {
                            return;
                        }
                    }
                    var blockTemp = blockX;
                    blockX = blockY;
                    blockY = blockTemp;
                    return;
                }
            }
        }