/// <summary>
        /// Disables given connect card, unsubscribing the task listener
        /// among other things
        /// </summary>
        /// <param name="card"></param>
        private void DisableConnectCard(ConnectCard card)
        {
            var cardGameObject = m_cardsDict[card];

            cardGameObject.SetActive(false);
            cardGameObject.GetComponent <ConnectCardAbstract>().m_TaskFinished -= OnConnectCardFinishedTask;
        }
        /// <summary>
        /// Enables given connect card, and sets it up
        /// </summary>
        /// <param name="card"></param>
        private void EnableConnectCard(ConnectCard card)
        {
            var cardGameObject = m_cardsDict[card];

            cardGameObject.SetActive(true);
            cardGameObject.GetComponent <ConnectCardAbstract>().m_TaskFinished += OnConnectCardFinishedTask;
            m_ActiveCardGO = cardGameObject;
        }
        /// <summary>
        /// Tries replacing old card with new card
        /// </summary>
        /// <param name="oldCard"></param>
        /// <param name="newCard"></param>
        private void ReplaceCard(ConnectCard oldCard, ConnectCard newCard)
        {
            var activeCardCount = m_cardsDict.Count(p => p.Value.activeInHierarchy);

            if (activeCardCount != 1)
            {
                Debug.LogError($"Wont replace card :: active card count {activeCardCount} is not 1");
                return;
            }

            if (m_cardsDict[oldCard] != m_ActiveCardGO)
            {
                var newOldCard = m_cardsDict.Where(p => p.Value == m_ActiveCardGO).First().Key;
                DisableConnectCard(newOldCard);
            }
            else
            {
                DisableConnectCard(oldCard);
            }

            EnableConnectCard(newCard);
        }