public static UnityDeck Parse(UnityCardGame cardGame, string deckName, DeckFileType deckFileType,
                                      string deckText)
        {
            var deck = new UnityDeck(cardGame, deckName, deckFileType);

            if (string.IsNullOrEmpty(deckText))
            {
                return(deck);
            }

            foreach (string line in deckText.Split('\n').Select(x => x.Trim()))
            {
                switch (deckFileType)
                {
                case DeckFileType.Dec:
                    deck.LoadDec(line);
                    break;

                case DeckFileType.Hsd:
                    deck.LoadHsd(line);
                    break;

                case DeckFileType.Ydk:
                    if (line.Equals("!side"))
                    {
                        return(deck);
                    }
                    deck.LoadYdk(line);
                    break;

                case DeckFileType.Lor:
                    deck.LoadLor(line);
                    break;

                case DeckFileType.Txt:
                default:
                    if (line.Equals("Sideboard") || line.Equals("sideboard") || line.Equals("Sideboard:"))
                    {
                        return(deck);
                    }
                    deck.LoadTxt(line);
                    break;
                }
            }

            return(deck);
        }
 public UnityDeck(UnityCardGame sourceGame, string name = DefaultName, DeckFileType fileType = DeckFileType.Txt,
                  IReadOnlyCollection <UnityCard> cards = null) : base(sourceGame, name, fileType, cards)
 {
     SourceGame = sourceGame ?? UnityCardGame.UnityInvalid;
     _cards     = cards != null ? new List <UnityCard>(cards) : new List <UnityCard>();
 }