private IEnumerator GameLoop()
        {
            yield return(DeckPreparationPhase());

            _isGameOver.Value = false;
            _isVictory.Value  = false;

            while (!_isGameOver.Value || _isVictory.Value)
            {
                _environmentDeck.UpdateAll();

                foreach (var player in _playerCollection.Value)
                {
                    yield return(AmbushPhase(player, _environmentDeck.GetByPlayer(player.PlayerId)));

                    _environmentDeck.UpdateAll();
                }

                _isGameOver.Value = _playerCollection.Value.Any(p => !p.Deck.Cards.Any());
                if (_isGameOver.Value)
                {
                    break;
                }

                yield return(DrawPhase());

                Debug.Log("Action Select Phase");
                yield return(ActionSelectPhase());

                foreach (var player in _playerCollection.Value)
                {
                    Debug.Log($"Attack Phase [Player {player.PlayerId}]");
                    yield return(AttackPhase(player));
                }

                _surgeHandler.RemoveSurge();

                yield return(new WaitForSeconds(2));

                Debug.Log("Discard Phase");
                yield return(DiscardPhase());
            }

            AudioManager.Instance.SwitchToMain();
            UnityEngine.SceneManagement.SceneManager.LoadScene("End Screen");
        }
        public void UpdateCard()
        {
            if (_environmentDeck.Count == 0)
            {
                return;
            }

            _card = _environmentDeck.GetByPlayer(_playerId);
            UpdateText();

            if (_card.NameId == _anomalieBossData.NameId)
            {
                _cardImage.enabled = false;
                _anomaliesBoss.gameObject.SetActive(true);
            }
            else if (_card.NameId == _meteroitBossData.NameId)
            {
                _cardImage.enabled = false;
                _meteroitBoss.gameObject.SetActive(true);
            }
            else if (_card.NameId == _technicalsBossData.NameId)
            {
                _cardImage.enabled = false;
                _technicalsBoss.gameObject.SetActive(true);
            }
            else
            {
                _cardImage.sprite = _card.Sprite;
            }

            _valueTextMesh.text = _card.Value.ToString();
            _valueImage.sprite  = _card.ValueBackground;
            _borderImage.sprite = _card.CardFrame;

            foreach (Transform child in _fractionTransform)
            {
                Destroy(child.gameObject);
            }

            foreach (var fraction in _card.Fractions)
            {
                SpawnFractionIcon(fraction);
            }
        }