示例#1
0
        private static (ILine first, ILine second) GetOverlapping(ILine first, ILine second)
        {
            var firstOverlap  = new Line();
            var secondOverlap = new Line();

            foreach (var firstTilePosition in first)
            {
                var secondTilePosition = second.FirstOrDefault(tilePosition => tilePosition.Coordinates.IsOverlapping(firstTilePosition.Coordinates));
                if (secondTilePosition != default(TilePosition))
                {
                    firstOverlap.Add(firstTilePosition);
                    secondOverlap.Add(secondTilePosition);
                }
            }

            return(firstOverlap, secondOverlap);
        }
示例#2
0
        private static Tiles ConnectDoorsViaConnectingLine(Tiles tilesWithUnconnectedDoors, ILine firstProjection, ILine secondProjection, ILine connectingLine)
        {
            var startOfConnectingLine = connectingLine.First();
            var firstDoor             = firstProjection.Single(tilePosition => tilesWithUnconnectedDoors.IsTileType <Door>(tilePosition.Coordinates));
            var fromFirstToConnecting = ExtractLineBetween(firstProjection, firstDoor.Coordinates, startOfConnectingLine.Coordinates);

            var endOfConnectingLine    = connectingLine.Last();
            var secondDoor             = secondProjection.Single(tilePosition => tilesWithUnconnectedDoors.IsTileType <Door>(tilePosition.Coordinates));
            var fromConnectingToSecond = ExtractLineBetween(secondProjection, secondDoor.Coordinates, endOfConnectingLine.Coordinates);

            var finalRoute = new Line();

            finalRoute.AddRange(fromFirstToConnecting);
            finalRoute.AddRange(connectingLine.Select(Tunnel));
            finalRoute.AddRange(fromConnectingToSecond);

            var stateChange = finalRoute.ToTilesState();
            var tilesWithNewlyConnectedDoors = tilesWithUnconnectedDoors.Clone(stateChange);

            return(tilesWithNewlyConnectedDoors);
        }
示例#3
0
 private static ILine ConnectProjections(Tiles tiles, Door firstDoor, Door secondDoor,
                                         ILine firstProjection, ILine secondProjection, (Compass4Points first, Compass4Points second) directions)