/// <summary>
        /// 把某个页面入栈,把某个页面显示在界面 上
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="panelType"></param>
        /// <param name="resource">是否是热更加载 </param>
        /// <param name="param"></param>
        /// <returns></returns>
        public BaseUI PushPanel <T>(UIPanelTypeEnum panelType, bool resource = false, object param1 = null, object param2 = null, object param3 = null) where T : BaseUI, new()
        {
            //判断一下栈里面是否有页面
            if (mPanelStack.Count > 0)
            {
                BaseUI curPanel = mPanelStack.Peek();
                if (curPanel.IsHotFix)
                {
                    ILRuntimeManager.Instance.AppDomainCtrl.Invoke(curPanel.HotFixClassName, "OnPause", curPanel);
                }
                else
                {
                    curPanel.OnPause();
                }
            }
            mCurSiblingIndex++;
            BaseUI panel = GetPanel <T>(panelType, resource);

            panel.IsHotFix = !resource;
            panel.SetSiblingIndex(ViewSiblingIndex.LOW + mCurSiblingIndex);
            mPanelStack.Push(panel);
            if (panel.IsHotFix)
            {
                ILRuntimeManager.Instance.AppDomainCtrl.Invoke(panel.HotFixClassName, "OnEnter", panel, param1, param2, param3);
            }
            else
            {
                panel.OnEnter(param1, param2, param3);
            }
            return(panel);
        }
Exemple #2
0
 public UIPanelSheet GetUIPanelSheet(UIPanelTypeEnum key)
 {
     if (mUIPanelSheetDict == null)
     {
         InitUIPanelSheet();
     }
     return(mUIPanelSheetDict[key]);
 }
        /// <summary>
        /// 发送消息给窗口
        /// </summary>
        /// <param name="name">窗口名</param>
        /// <param name="msgID">消息ID</param>
        /// <param name="paralist">参数数组</param>
        /// <returns></returns>
        public bool SendMessageToWindow(UIPanelTypeEnum panelType, UIMsgID msgID = 0, params object[] paralist)
        {
            BaseUI panel = mPanelDict.TryGet(panelType);

            if (panel != null)
            {
                return(panel.OnMessage(msgID, paralist));
            }
            return(false);
        }
        /// <summary>
        /// 根据面板类型 得到实例化的面板
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="panelType"></param>
        /// <param name="resource">如果是资源本地加载  本地路径文件Resource/Prefab/UI/名字</param>
        /// <returns></returns>
        private BaseUI GetPanel <T>(UIPanelTypeEnum panelType, bool resource = false) where T : BaseUI, new ()
        {
            BaseUI baseUI;

            if (resource)
            {
                baseUI = System.Activator.CreateInstance(typeof(T)) as BaseUI;
            }
            else
            {
                string typeName = System.Enum.GetName(typeof(UIPanelTypeEnum), panelType);
                string hotName  = "Hotfix." + typeName + "Logic";
                baseUI = ILRuntimeManager.Instance.AppDomainCtrl.Instantiate <BaseUI>(hotName);

                baseUI.HotFixClassName = hotName;
            }

            string     path = SheetManager.Instance.GetUIPanelSheet(panelType).Path;
            GameObject go;

            if (resource)
            {
                go = GameObject.Instantiate(Resources.Load <GameObject>("Prefabs/UI/" + panelType.ToString())) as GameObject;
            }
            else
            {
                go = ObjectManager.Instance.InstantiateObject(path, false, false);
            }
            if (go == null)
            {
                Debug.Log("创建窗口Prefab失败:" + panelType.ToString());
                return(null);
            }
            go.transform.SetParent(WindRoot, false);
            baseUI.Init(go, panelType);
            mPanelDict.Add(panelType, baseUI);
            return(baseUI);
        }
        /// <summary>
        /// 按指定层级添加UI
        /// 直接添加的View不进入Stack管理
        /// </summary>
        public void Add <T>(UIPanelTypeEnum panelType, int siblingIndex) where T : BaseUI, new()
        {
            var view = GetPanel <T>(panelType);

            view.SetSiblingIndex(siblingIndex);
        }
 /// <summary>
 /// 替换当前Panel
 /// </summary>
 public void Replace <T>(UIPanelTypeEnum panelType) where T : BaseUI, new ()
 {
     PopPanel(true);
     PushPanel <T>(panelType);
 }
 /// <summary>
 /// 强制打开指定界面,删除栈内所有UI
 /// </summary>
 /// <param name="name"></param>
 /// <param name="bTop"></param>
 /// <param name="paralist"></param>
 public void SwitchStateByName <T>(UIPanelTypeEnum panelType) where T : BaseUI, new()
 {
     CloseAllPanel();
     PushPanel <T>(panelType);
 }
Exemple #8
0
 /// <summary>
 /// 初始化
 /// </summary>
 public void Init(GameObject gameobject, UIPanelTypeEnum panelType)
 {
     UIObj     = gameobject;
     RectTrans = UIObj.GetComponent <RectTransform>();
     PanelType = panelType;
 }