private IEnumerator DoPrepairDataToPlay(StageData stage, Action <bool> actionOnDone = null)
    {
        UIToast.ShowLoading(randomTip, 5f, UIToast.IconTip);
        UILoadGame.Init(true, null);

        while (UILoadGame.currentProcess < 0.1f)
        {
            UILoadGame.Process(0, 1, -1, LocalizedManager.Key("base_Loading") + LocalizedManager.Key("base_PleaseWait"));
            yield return(null);
        }

        if (UIToast.Status != UIAnimStatus.IsShow)
        {
            UIToast.ShowLoading(randomTip, 5f, UIToast.IconTip);
        }

        MusicManager.Stop(null, false, 0.25f);

        if (string.IsNullOrEmpty(currentMode))
        {
            currentMode = modes[0];
        }

        //Init game object
        elapsedTime    = 0f;
        loadMidiStatus = FileStatus.Download;
        loadMidiStatus = FileStatus.Success;

        GameStateManager.Init(null);

        while (GameStateManager.CurrentState == GameState.Init || UILoadGame.currentProcess < 1)
        {
            if (GameStateManager.CurrentState != GameState.Idle && elapsedTime < 5)
            {
                UILoadGame.Process();
                elapsedTime += Time.deltaTime;
                yield return(null);
            }
            else
            {
                yield return(UILoadGame.DoRollBack(() =>
                {
                    UIToast.Hide();
                    actionOnDone(false);
                }));

                yield break;
            }
        }

        UIToast.Hide();
        actionOnDone(true);
    }
 public virtual void ShowResult()
 {
     UIToast.ShowLoading("", 1);
     InitResultData();
     Status = UIAnimStatus.IsAnimationShow;
     if (anim.Status != UIAnimStatus.IsShow)
     {
         anim.Show(() => {
             animResult.Show(null, () => OnShowResult());
         });
     }
     else
     {
         animResult.Show(null, () => OnShowResult());
     }
 }