def receive(self, tile=None, meld=None): """receive a tile or meld and return the meld this tile becomes part of""" if tile: if tile.isBonus(): if tile.board == self: return meld = Meld(tile) else: meld = self.__chooseDestinationMeld(tile, meld) # from selector board. # if the source is a Handboard, we got a Meld, not a Tile if not meld: # user pressed ESCAPE return None assert not tile.element.istitle() or meld.pairs[0] != 'Xy', tile senderBoard = meld[0].board senderBoard.removing(meld=meld) if senderBoard == self: self.player.moveMeld(meld) self.sync() else: self.player.addMeld(meld) self.sync(adding=meld.tiles) senderBoard.remove(meld=meld) meld.tiles = sorted(meld.tiles, key=lambda x: x.xoffset) if any(x.focusable for x in meld.tiles): for idx, tile in enumerate(meld.tiles): tile.focusable = idx == 0 return meld