//Called when the button on top of the coverDeck is clicked, loops the cards in it and reset if the finish. public void OnCoverDeckClick() { //If there are still cards in the cover deck if (coveredDeckCardsRow.coveredCardsInRow.Count > 0) { addMove(); Card card = coveredDeckCardsRow.coveredCardsInRow.DropLastMono(); card.Uncover(); uncoveredDeckCardsRow.AddCardToRow(card); undoEnum = UndoEnum.DeckClick; } else //If cover deck is empty reset it and detract 100 points { if (uncoveredDeckCardsRow.uncoveredCardsInRow.Count > 0) { addMove(); coveredDeckCardsRow.addCardsToRow(uncoveredDeckCardsRow.uncoveredCardsInRow, true); uncoveredDeckCardsRow.uncoveredCardsInRow.Clear(); coveredDeckCardsRow.coveredCardsInRow.Reverse(); addPoints(RESET_DECK_SCORE); undoEnum = UndoEnum.DeckReset; } } }
//Check the last action and revert it public void UndoMove() { switch (undoEnum) { case UndoEnum.RowMove: //row move { removeMove(); addPoints(lastPointsAdded); MoveToLastUsedRow(lastUsedRow, lastUsedCard); break; } case UndoEnum.DeckClick: //Deck click { removeMove(); Card card = uncoveredDeckCardsRow.uncoveredCardsInRow.DropLastMono(); card.Cover(); coveredDeckCardsRow.AddCardToRow(card); undoEnum = UndoEnum.None; break; } case UndoEnum.DeckReset: //Deck reset { if (coveredDeckCardsRow.coveredCardsInRow.Count > 0) { removeMove(); coveredDeckCardsRow.coveredCardsInRow.Reverse(); uncoveredDeckCardsRow.addCardsToRow(coveredDeckCardsRow.coveredCardsInRow, false); coveredDeckCardsRow.coveredCardsInRow.Clear(); addPoints(lastPointsAdded); undoEnum = UndoEnum.None; } break; } case UndoEnum.RowMoveCover: { removeMove(); addPoints(lastPointsAdded); lastUsedRow.uncoveredCardsInRow.ReadLastMono().Cover(); lastUsedRow.coveredCardsInRow.Add(lastUsedRow.uncoveredCardsInRow.DropLastMono()); MoveToLastUsedRow(lastUsedRow, lastUsedCard); break; } } }
//Move cards to the destination row and add move and points public void ExecuteCardTransfer(Row destinationRow, Card firstCardOfMovableRow) { MoveToLastUsedRow(destinationRow, firstCardOfMovableRow); if (destinationRow != lastUsedRow) { addMove(); lastPointsAdded = 0; if (destinationRow.b_isMasterSuitRow) { addPoints(MASTER_SUIT_SCORE); } undoEnum = UndoEnum.RowMove; if (lastUsedRow.UncoverLastCoveredCard()) { undoEnum = UndoEnum.RowMoveCover; addPoints(UNCOVER_CARD_SCORE); } //lastUsedRow = null; } }