public void MoveCardFromPlayerToCommonDeck(int playerCardId, int commonDeckCardId, GameModel.Turn turn) { _commandsSequence.Enqueue(() => { List <Card> currentPlayerDeck = turn == GameModel.Turn.PLAYER ? _playerCards : _opponentCards; Card cardToMove = FindCardById(currentPlayerDeck, playerCardId); if (cardToMove == null) { Debug.LogError("can't move card from current player: " + turn + " card id: " + playerCardId + " no such card in player deck"); } else { CardHolder holderDestination = FindCardHolderByCardId(_commonDeckCardHolders, commonDeckCardId); if (holderDestination == null) { Debug.LogError("can't move card to common deck - no such card with id: " + commonDeckCardId); } else { holderDestination.DetachCard(); Sequence sequence = DOTween.Sequence(); Card cardToRemoveFromCommonDeck = FindCardById(_commonDeckCards, commonDeckCardId); sequence.Append(cardToMove.RectTransform.DOMove(holderDestination.RectTransform.position, 1)); sequence.Append(cardToMove.RectTransform.DOScale(Vector3.zero, 0.1f)); sequence.Join(cardToRemoveFromCommonDeck.RectTransform.DOScale(Vector3.zero, 0.1f)); sequence.OnComplete(() => { _commonDeckCards.Remove(cardToRemoveFromCommonDeck); DestroyCard(cardToRemoveFromCommonDeck); DestroyCard(cardToMove); NextCommand(); }); } } }); if (_currentCommand == null && _commandsSequence.Count > 0) { NextCommand(); } }