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