public void ClearUI()
    {
        // sieutoc
        btSieuToc.SetupAll(!isSieuToc);
        _machine.SetSpeed(isSieuToc ? 3 : 1);

        isAutoSpin = false;
        lastResult = null;

        StopAllCoroutines();

        playLastResult    = null;
        waitMachineFinish = null;

        gNotifyMoneyWin.SetActive(false);
        gNotifyMoneyWin.SetActive(false);

        gMenuContent.SetActive(false);

        vkTxtTotalWin.SetNumber(0);

        _machine.ClearUI();

        if (gEvent.activeSelf)
        {
            vkEventNoticeRun.StopRunNotice();
            gEvent.SetActive(false);
        }

        LoadAutoSpinState();
        EnableToPlay();
    }
    public void HandleSpinResult(object[] data)
    {
        //setup Button auto
        btAutoSpin.enabled = isAutoSpin;

        //data
        string json = LitJson.JsonMapper.ToJson(data[0]);
        SRSSlot20LineResultSpin result = JsonUtility.FromJson <SRSSlot20LineResultSpin>(json);

        if (result.ResponseStatus != (int)GameResponseStatus.SUCCESS)
        {
            isAutoSpin = false;
            LoadAutoSpinState();
            EnableToPlay();
            return;
        }

        // Reset
        StopAnimLastResult();
        SetNotifyMoney("");
        vkTxtTotalWin.UpdateNumber(0);

        _machine.HideItemWin();
        _machine.HideLineWin();

        if (waitMachineFinish != null)
        {
            StopCoroutine(waitMachineFinish);
        }

        //updatejackpot
        jackpot = result.Jackpot;
        UpdateJackpot();

        // spin
        waitMachineFinish = WaitMachineFinish(result);
        StartCoroutine(waitMachineFinish);
    }
    IEnumerator PlayLastSpinResult(SRSSlot20LineResultSpin result)
    {
        while (true)
        {
            yield return(new WaitForSeconds(1.5f));

            SetNotifyMoney("");

            List <int> lineTemps = new List <int>();
            List <int> itemWins  = new List <int>();
            foreach (var lineWin in result.PrizesData)
            {
                //_machine.HideItemWin();

                lineTemps.Add(lineWin.LineID);
                itemWins.AddRange(lineWin.Items);

                _machine.ShowLineAndItemWin(new List <int> {
                    lineWin.LineID
                }, lineWin.Items);

                SetNotifyMoney(lineWin.PrizeValue > 0 ? VKCommon.ConvertStringMoney(lineWin.PrizeValue) : "");
                yield return(new WaitForSeconds(2.5f));
            }

            if (result.TotalPrizeValue > 0)
            {
                SetNotifyMoney(VKCommon.ConvertStringMoney(result.TotalPrizeValue));
            }
            _machine.ShowLineAndItemWin(lineTemps, itemWins);
            yield return(new WaitForSeconds(1.5f));

            _machine.HideLineWin();
            _machine.HideItemWin();
        }
    }
    // quay spin
    IEnumerator WaitMachineFinish(SRSSlot20LineResultSpin result)
    {
        _machine.StartMachineLeftToRight(result.GetSlotData());

        if (!isSieuToc)
        {
            yield return(new WaitForSeconds(0.5f));

            AudioAssistant.Instance.PlaySoundGame(_config.gameId, _config.audioSpin);
        }

        lastResult = result;
        yield return(new WaitUntil(() => !_machine.isRunning));

        if (accountSpin.FreeSpin <= 0 || result.Balance > 0)
        {
            Database.Instance.UpdateUserMoney(moneyType, result.Balance);
        }

        if (result.PrizesData != null && result.PrizesData.Count > 0)
        {
            // show line win
            List <int> lineTemps = new List <int>();
            List <int> itemWins  = new List <int>();
            foreach (var lineWin in result.PrizesData)
            {
                lineTemps.Add(lineWin.LineID);
                itemWins.AddRange(lineWin.Items);
            }
            itemWins = itemWins.Distinct().ToList();
            _machine.ShowLineAndItemWin(lineTemps, itemWins);

            // free
            if (result.TotalFreeSpin > 0)
            {
                if (accountSpin.FreeSpin <= 0)
                {
                    bool isShowing = true;
                    UILayerController.Instance.ShowLayer(UILayerKey.LGameSlot20LineWin, _assetBundleConfig.name, (layer) =>
                    {
                        ((LGameSlot20LineWin)layer).Init(LGameSlot20LineWin.Slot20LineWinType.FREE, _config, () =>
                        {
                            isShowing = false;
                        }, accountSpin.FreeSpin);
                    });

                    yield return(new WaitUntil(() => !isShowing));

                    yield return(new WaitForSeconds(0.5f));
                }
            }

            // free
            accountSpin.FreeSpin = result.TotalFreeSpin;
            SetNotifyFree();

            if (result.IsJackpot)
            {
                if (result.TotalJackpot <= 0)
                {
                    result.TotalJackpot = 1;
                }
                var jackpoValues = result.PrizesData.OrderByDescending(a => a.PrizeValue).Select(b => b.PrizeValue).ToList();
                for (int i = 0; i < result.TotalJackpot; i++)
                {
                    bool isShowing = true;
                    UILayerController.Instance.ShowLayer(UILayerKey.LGameSlot20LineWin, _assetBundleConfig.name, (layer) =>
                    {
                        ((LGameSlot20LineWin)layer).Init(LGameSlot20LineWin.Slot20LineWinType.JACKPOT, _config, () =>
                        {
                            isShowing = false;
                        }, jackpoValues[i]);
                    });

                    yield return(new WaitUntil(() => !isShowing));

                    yield return(new WaitForSeconds(0.5f));
                }
            }
            else
            {
                int xBet = (int)(result.TotalPrizeValue / (roomBetValue * _machine.idLineSelecteds.Count));
                // bigwin
                if (xBet >= 25)
                {
                    bool isShowing = true;
                    UILayerController.Instance.ShowLayer(UILayerKey.LGameSlot20LineWin, _assetBundleConfig.name, (layer) =>
                    {
                        ((LGameSlot20LineWin)layer).Init(LGameSlot20LineWin.Slot20LineWinType.PERFECT, _config, () =>
                        {
                            isShowing = false;
                        }, result.TotalPrizeValue);
                    });

                    yield return(new WaitUntil(() => !isShowing));

                    yield return(new WaitForSeconds(0.5f));
                }
                else if (xBet >= 10)
                {
                    bool isShowing = true;
                    UILayerController.Instance.ShowLayer(UILayerKey.LGameSlot20LineWin, _assetBundleConfig.name, (layer) =>
                    {
                        ((LGameSlot20LineWin)layer).Init(LGameSlot20LineWin.Slot20LineWinType.BIGWIN, _config, () =>
                        {
                            isShowing = false;
                        }, result.TotalPrizeValue);
                    });

                    yield return(new WaitUntil(() => !isShowing));

                    yield return(new WaitForSeconds(0.5f));
                }
            }

            if (result.BonusGame != null && result.BonusGame.StartBonus > 0)
            {
                bonusResult = null;

                // show win bonus
                bool isShowing = true;
                UILayerController.Instance.ShowLayer(UILayerKey.LGameSlot20LineWin, _assetBundleConfig.name, (layer) =>
                {
                    ((LGameSlot20LineWin)layer).Init(LGameSlot20LineWin.Slot20LineWinType.BONUS, _config, () =>
                    {
                        isShowing = false;
                    });
                });

                yield return(new WaitUntil(() => !isShowing));

                // show game bonus
                isShowing = true;
                UILayerController.Instance.ShowLayer(UILayerKey.LGameSlot20LineBonus, _assetBundleConfig.name, (layer) =>
                {
                    ((LGameSlot20LineBonus)layer).Init(_config, result.BonusGame, roomBetValue, () =>
                    {
                        isShowing = false;
                        _server.HubCallFinishBonusGame(moneyType, result.SpinID);
                    });
                });

                yield return(new WaitUntil(() => !isShowing));

                yield return(new WaitUntil(() => bonusResult != null));

                yield return(new WaitUntil(() => bonusResult == null));
            }

            // Money
            if (result.TotalPrizeValue > 0)
            {
                AudioAssistant.Instance.PlaySoundGame(_config.gameId, _config.audioWin);
            }
            SetNotifyMoney(result.TotalPrizeValue > 0 ? VKCommon.ConvertStringMoney(result.TotalPrizeValue) : "");
            if (result.BonusGame != null && result.BonusGame.PrizeValue > 0)
            {
                vkTxtTotalWin.UpdateNumber(result.TotalPrizeValue + result.BonusGame.PrizeValue);
            }
            else
            {
                vkTxtTotalWin.UpdateNumber(result.TotalPrizeValue);
            }

            //yield return new WaitForSeconds(2f);
        }
        else
        {
            // ko trung gi
            // free
            accountSpin.FreeSpin = result.TotalFreeSpin;
            SetNotifyFree();
        }

        waitMachineFinish = null;

        if (isAutoSpin)
        {
            if (result.TotalPrizeValue > 0)
            {
                yield return(new WaitForSeconds(_config.timeWaitNextAuto / _machine.speed));
            }
            else
            {
                yield return(new WaitForSeconds(0.2f));
            }
            ButtonSpinClickListener();
        }
        else
        {
            EnableToPlay();
            StartAnimLastResult();
        }
    }