IEnumerator DoActionPlayerJoinGame(AnimalRacingData.PlayerJoinGame_Data _playerJoinGameData)
    {
        // ---- Merge dữ liệu ---- //
        if (animalRacingData.listOtherPlayerData[_playerJoinGameData.viewerId].sessionId >= 0)
        {
            #if TEST
            Debug.LogError(">>> Chỗ này đã có người rồi: " + _playerJoinGameData.viewerId);
            #endif
            yield break;
        }
        if (_playerJoinGameData.userData.sessionId != DataManager.instance.userData.sessionId)
        {
            animalRacingData.listOtherPlayerData[_playerJoinGameData.viewerId] = _playerJoinGameData.userData;
            animalRacingData.listOtherPlayerData[_playerJoinGameData.viewerId].AddNewTotalBetInGameInfo(IMiniGameInfo.Type.AnimalRacing);
            #if TEST
            Debug.Log(">>> Có người chơi " + animalRacingData.listOtherPlayerData[_playerJoinGameData.viewerId].nameShowInGame + " vào bàn tại vị trí " + _playerJoinGameData.viewerId);
            #endif
        }
        // ----------------------- //

        betManager.RefreshUIPanelListPlayerViewer();
    }
    IEnumerator DoActionCheckPlayerJoinGame()
    {
        AnimalRacingData.PlayerJoinGame_Data _playerJoinGameData = animalRacingData.processPlayerJoinGame[0];
        System.Action _onFinished = () => {
            _playerJoinGameData = null;
            animalRacingData.processPlayerJoinGame.RemoveAt(0);
        };

        if (currentState == State.Bet)
        {
            yield return(StartCoroutine(DoActionPlayerJoinGame(_playerJoinGameData)));
        }
        else
        {
            listProcessPlaying.Add(DoActionPlayerJoinGame(_playerJoinGameData));
        }

        if (_onFinished != null)
        {
            _onFinished();
        }
        yield break;
    }