public void SetDialog(Dialog dialog, UiPolicy uiPolicy)
    {
        if (!initialized)
        {
            Init();
        }
        bool isScrolledAllTheWayDown = !scrollRect.verticalScrollbar.gameObject.activeInHierarchy ||
                                       scrollRect.verticalNormalizedPosition < 1f / 1024; // keep scrolling down if really close to bottom

        switch (uiPolicy)
        {
        case UiPolicy.StartOver: RemoveDialogElements(); break;

        case UiPolicy.DisablePrev: DeactivateDialogChoices(); break;

        case UiPolicy.Continue: break;
        }
        if (dialog == null)
        {
            tokenizer.AddError("missing dialog");  return;
        }
        if (dialog.options != null)
        {
            for (int i = 0; i < dialog.options.Length; ++i)
            {
                Dialog.DialogOption opt = dialog.options[i];
                if (opt.Available(tokenizer, GetScriptScope()))
                {
                    AddDialogOption(opt, isScrolledAllTheWayDown);
                }
            }
        }
    }