public void ShowCoutingText()
    {
        currentSheepCount++;

        TMPRichTextX txtMesh = coutingTextPool[currentTextPoolCursor];

        currentTextPoolCursor++;
        if (currentTextPoolCursor >= numOfCountingText)
        {
            currentTextPoolCursor = 0;
        }

        string content = string.Format("<sprite>sheepIcon</sprite>{0}", currentSheepCount.ToString());

        txtTopCountingText.SetText(content);
        txtMesh.SetText(content);

        txtMesh.DOKill();
        txtMesh.TextMeshProUGUIComp.DOFade(1, 0);
        txtMesh.gameObject.SetActive(true);
        txtMesh.transform.position = sampleText.transform.position;

        txtMesh.transform.DOPath(coutingTextFlyWayPoint, 5.0f, PathType.CatmullRom);
        txtMesh.TextMeshProUGUIComp.DOFade(0, 5.0f).onComplete = () =>
        {
            txtMesh.gameObject.SetActive(false);
        };
    }
    public void AddSheepValue(double value)
    {
        float doubleValue = BoostTimer.Instance.IsX2SheepValue ? 2 : 1;

        value             *= 2;
        currentSheepValue += value;
        DataManager.Instance.PlayerData.userSheepCoin = currentSheepValue;

        TMPRichTextX txtMesh = coutingTextPool[currentTextPoolCursor];

        currentTextPoolCursor++;
        if (currentTextPoolCursor >= numOfCountingText)
        {
            currentTextPoolCursor = 0;
        }

        string content = string.Format("<sprite>sheepIcon</sprite>{0}", BigNumbers.BigNumber.ToShortString(currentSheepValue.ToString("F0"), 4));

        txtTopCountingText.SetText(content);

        if (BoostTimer.Instance.IsX2SheepValue)
        {
            content = string.Format("<sprite>sheepIcon</sprite><color=blue>{0}", BigNumbers.BigNumber.ToShortString(value.ToString("F0"), 4));
        }
        else
        {
            content = string.Format("<sprite>sheepIcon</sprite>{0}", BigNumbers.BigNumber.ToShortString(value.ToString("F0"), 4));
        }

        txtMesh.SetText(content);

        txtMesh.DOKill();
        txtMesh.TextMeshProUGUIComp.DOFade(1, 0);
        txtMesh.gameObject.SetActive(true);
        txtMesh.transform.position = sampleText.transform.position;

        txtMesh.transform.DOPath(coutingTextFlyWayPoint, 5.0f, PathType.CatmullRom);
        txtMesh.TextMeshProUGUIComp.DOFade(0, 5.0f).onComplete = () =>
        {
            txtMesh.gameObject.SetActive(false);
        };
    }
    private void Start()
    {
        ConfigManager.Instance.LoadConfig();
        SimpleResourcesManager.Instance.LoadResource();
        DialogManager.Instance.LoadDialog();
        DataManager.Instance.LoadData((isSuccess) =>
        {
            BoostTimer.Instance.SetUp();
            DataManager.Instance.PlayerData.userPlayTime += 1;
            currentSheepValue = DataManager.Instance.PlayerData.userSheepCoin;
            LoadSheep(DataManager.Instance.PlayerData.sheepDatas);
            string content = string.Format("<sprite>sheepIcon</sprite>{0}", BigNumbers.BigNumber.ToShortString(currentSheepValue.ToString("F0"), 4));
            txtTopCountingText.SetText(content);

            LevelConfigData lvlConfig = ConfigManager.Instance.GetLevelConfigByLevel(DataManager.Instance.PlayerData.userLevel);
            float lvlProgressVal      = DataManager.Instance.PlayerData.userExp * 1.0f / lvlConfig.Maxexp;

            txtLevelProgress.text  = "Lv. " + DataManager.Instance.PlayerData.userLevel + "- <color=white>" + (lvlProgressVal * 100).ToString("F0") + "%";
            lvlProgress.fillAmount = lvlProgressVal;

            txtLimitSheep.text = currentSheepInCage + "/" + lvlConfig.Maxsheep;

            if (DataManager.Instance.PlayerData.userLevel >= 3)
            {
                SpawnTimer.Instance.Setup();
            }

            if (isOnCutScene && DataManager.Instance.PlayerData.userPlayTime == 1)
            {
                camTarget.gameObject.SetActive(true);
                cameraHandler.enabled = false;
                cutSceneSheep.gameObject.SetActive(true);
                mainCam.GetComponent <Cinemachine.CinemachineBrain>().enabled = true;
                OpenGateLeaveSheepOut(cutSceneSheep);

                SheepConfigData sheepConfigData = ConfigManager.Instance.GetSheepConfigByType(1);
                cutSceneSheep.InitSheep(sheepConfigData.Sheepvalue, sheepConfigData.Speed);
            }
            else
            {
                Destroy(camTarget.gameObject);
                Destroy(camOverrall.gameObject);
                Destroy(camCart.transform.parent.gameObject);

                Destroy(mainCam.GetComponent <Cinemachine.CinemachineBrain>());

                cameraHandler.enabled = true;
                cutSceneSheep.gameObject.SetActive(false);

                if (DataManager.Instance.PlayerData.userPlayTime == 1)
                {
                    int initSheepCount = 1;
                    for (int i = 0; i < initSheepCount; ++i)
                    {
                        SheepController sheepController = SheepFactory.Instance.CreateNewSheep(1);
                        GameController.Instance.PutSheepBackToCage(sheepController);
                        SimpleResourcesManager.Instance.ShowParticle("MergeFx", sheepController.transform.position, 1);
                    }
                }
            }
        });
    }