private async Task ConnectComponents(TilePosition position, Tile tile, Tile neighbour) { var neighbourPosition = position.GetOpposite(); // connect components in middle of tile side var neighbourComponent = neighbour.GetComponentAt(neighbourPosition); var component = tile.GetComponentAt(position); GetMergedComponent(neighbourComponent, component, out BoardComponent bcMerged); // get terrain type on connected side var terrain = neighbour.GetTerrainAt(neighbourPosition); if (terrain == TerrainType.Road) { CheckIsRoadClosed(bcMerged); // connect first field beside the road var tcNeighbourLeft = neighbour.GetComponentAt(neighbourPosition.GetPositionLeftOfMiddle()); var tcTileRight = tile.GetComponentAt(position.GetPositionRightOfMiddle()); GetMergedComponent(tcNeighbourLeft, tcTileRight, out _); // connect second field beside the road var tcNeighbourRight = neighbour.GetComponentAt(neighbourPosition.GetPositionRightOfMiddle()); var tcTileLeft = tile.GetComponentAt(position.GetPositionLeftOfMiddle()); GetMergedComponent(tcNeighbourRight, tcTileLeft, out _); } else if (terrain == TerrainType.Castle) { await CheckIsCastleClosed(bcMerged, tile.X, tile.Y); } }