Beispiel #1
0
    public UiDialogHandle ShowModalPrefab(GameObject prefab, object param = null,
                                          ShowModalOption option          = ShowModalOption.BlackCurtain)
    {
        _logger.InfoFormat("ShowModalPrefab({0})", prefab.name);

        var dialogGo = UiHelper.AddChild(_dialogRoot.gameObject, prefab);

        var dialog = dialogGo.GetComponent <UiDialog>();

        return(ShowModalInternal(dialog, true, param, option));
    }
Beispiel #2
0
    public UiDialogHandle ShowModalTemplate(GameObject gameObject, object param = null,
                                            ShowModalOption option = ShowModalOption.BlackCurtain)
    {
        _logger.InfoFormat("ShowModalTemplate({0})", gameObject.transform.name);

        var dialogGo = UiHelper.AddChild(_dialogRoot.gameObject, gameObject);

        dialogGo.SetActive(true);

        var dialog = dialogGo.GetComponent <UiDialog>();

        return(ShowModalInternal(dialog, true, param, option));
    }
Beispiel #3
0
    public UiDialogHandle ShowModal <T>(T dialog, object param = null,
                                        ShowModalOption option = ShowModalOption.BlackCurtain)
        where T : UiDialog
    {
        _logger.InfoFormat("ShowModal({0})", dialog.GetType().Name);

        if (dialog.gameObject.activeSelf)
        {
            _logger.InfoFormat("Failed to show modal because already shown");
            return(null);
        }

        dialog.gameObject.SetActive(true);
        return(ShowModalInternal(dialog, false, param, option));
    }
Beispiel #4
0
    public UiDialogHandle ShowModalRoot <T>(object param           = null,
                                            ShowModalOption option = ShowModalOption.BlackCurtain)
        where T : UiDialog
    {
        var dialogGo = FindFromDialogRoot(typeof(T).Name);

        if (dialogGo == null)
        {
            throw new Exception("ShowModalRoot not found: " + typeof(T).Name);
        }

        var dialog = dialogGo.GetComponent <T>();

        if (dialog == null)
        {
            throw new Exception("ShowModalRoot type mismatched: " + typeof(T).Name);
        }

        return(ShowModal(dialog, param, option));
    }
Beispiel #5
0
    /// <summary>
    /// ********显示窗口的实现方法*******
    /// </summary>
    /// <param name="dialog">会话框</param>
    /// <param name="isTemporary"></param>
    /// <param name="param"></param>
    /// <param name="option"></param>
    /// <returns></returns>
    private UiDialogHandle ShowModalInternal(UiDialog dialog, bool isTemporary, object param, ShowModalOption option)
    {
        // create curtain for blocking input
        ///<summary>
        ///背景黑罩
        ///</summary>
        RectTransform curtain = null;

        if ((option & ShowModalOption.BlackCurtain) != 0 && _fadingOutBlackCurtain != null)
        {
            // When there is a curtain fading out, reuse it to reduce flickering

            curtain = _fadingOutBlackCurtain;

            DOTween.Kill(curtain.GetComponentInChildren <Image>());
            _fadingOutBlackCurtain = null;
        }
        else
        {
            //curtain为对话框弹出后的背景遮罩 改变背景颜色
            curtain = CreateCurtain(new Color(0, 0, 0, 0), _dialogRoot);
        }

        //SetSiblingIndex->用于设置节点在hierarchy中的层级 如0,1,2,3
        //在UI layer中hierarchy中的层级代表了渲染顺序
        //渲染层级与父节点统一 SiblingIndex(渲染)
        curtain.SetSiblingIndex(dialog.GetComponent <RectTransform>().GetSiblingIndex());

        //会话框要比背景后渲染
        // unnecessary but it works as workaround for setting sibling index
        dialog.GetComponent <RectTransform>().SetSiblingIndex(curtain.GetSiblingIndex() + 1);

        if ((option & ShowModalOption.BlackCurtain) != 0)
        {
            _blackCurtainCount += 1;
            var image = curtain.GetComponentInChildren <Image>();
            image.DOColor(new Color(0, 0, 0, 0.7f), 0.15f).SetUpdate(true);
        }

        // fade in dialog

        var dialogRt = dialog.GetComponent <RectTransform>();

        dialogRt.localScale = Vector3.one * 1.1f;
        dialogRt.DOScale(Vector3.one, 0.2f).SetEase(Ease.OutCubic).SetUpdate(true);

        var dialogCg = dialog.GetComponent <CanvasGroup>();

        dialogCg.alpha = 0.2f;
        //渐变
        dialogCg.DOFade(1f, 0.2f).SetEase(Ease.OutCubic).SetUpdate(true);

        // create handle and register to modals

        var handle = new UiDialogHandle
        {
            Dialog  = dialog,
            Visible = true
        };

        _modals.Add(new ModalEntity
        {
            Handle      = handle,
            IsTemporary = isTemporary,
            Curtain     = curtain,
            Option      = option
        });

        dialog.OnShow(param);

        return(handle);
    }