def exposeMeld(self, meldTiles, calledTile=None): """exposes a meld with meldTiles: removes them from concealedTileNames, adds the meld to exposedMelds and returns it calledTile: we got the last tile for the meld from discarded, otherwise from the wall""" game = self.game game.activePlayer = self allMeldTiles = meldTiles[:] if calledTile: allMeldTiles.append(calledTile.element if isinstance(calledTile, Tile) else calledTile) if len(allMeldTiles) == 4 and allMeldTiles[0].islower(): tile0 = allMeldTiles[0].lower() # we are adding a 4th tile to an exposed pung self._exposedMelds = [meld for meld in self._exposedMelds if meld.pairs != [tile0] * 3] meld = Meld(tile0 * 4) self.__concealedTileNames.remove(allMeldTiles[3]) self.visibleTiles[tile0] += 1 else: allMeldTiles = sorted(allMeldTiles) # needed for Chow meld = Meld(allMeldTiles) for meldTile in meldTiles: self.__concealedTileNames.remove(meldTile) for meldTile in allMeldTiles: self.visibleTiles[meldTile.lower()] += 1 meld.expose(bool(calledTile)) self._exposedMelds.append(meld) self.__hand = None game.computeDangerous(self) adding = [calledTile] if calledTile else None self.syncHandBoard(adding=adding) return meld