private void Iterate(int selector, List <Card> list)
        {
            CardPlayShell shell = playDictionary[list[selector]];

            foreach (KeyValuePair <int, Play> play in shell.play)
            {
                foreach (Card card in list)
                {
                    groupPlayManager.AddGroup(playDictionary);
                }
                shell.increaseIterator();
                if (selector > 0)
                {
                    Iterate(selector - 1, list);
                }
            }
            shell.iterator = 0;
        }
        public void attackRow(FunctionalRow row, BoardFunctionality boardFunc)
        {
            playDictionary = new Dictionary <Card, CardPlayShell>();
            foreach (Card friendlyCard in boardFunc.friendlySide.Rows[Side.FieldUnit].cardsInContainer)
            {
                if (!friendlyCard.cardProps.exhausted)
                {
                    CardPlayShell cardPlayShell = new CardPlayShell();
                    foreach (Card enemyCard in row.cardsInContainer)
                    {
                        cardPlayShell.AddEnemy(enemyCard);
                    }
                    cardPlayShell.SetCardToMakePlay(friendlyCard);
                    cardPlayShell.SetPlays(boardFunc);
                    playDictionary.Add(friendlyCard, cardPlayShell);
                }
            }

            List <Card> list       = boardFunc.friendlySide.Rows[Side.FieldUnit].cardsInContainer;
            int         lastMember = boardFunc.friendlySide.Rows[Side.FieldUnit].unexhaustedCount() - 1;

            Iterate(lastMember, list);                   //biggish load of work for comp, maybe make this async?
            groupPlayManager.executeBestPlay(boardFunc); //assign those sweet actions
        }