public Action <InfoBoxBtnType> m_btnClkDisp; // 按钮点击回调 public void resetDefault() { m_infoBoxModeType = InfoBoxModeType.eMode_2; m_formID = UIFormID.eUIInfo; m_midDesc = ""; m_btnClkDisp = null; }
// 显示一个 UI public void showForm(UIFormID ID) { if (hasForm(ID)) { showFormInternal(ID); } }
public Action<InfoBoxBtnType> m_btnClkDisp; // 按钮点击回调 public void resetDefault() { m_infoBoxModeType = InfoBoxModeType.eMode_2; m_formID = UIFormID.eUIInfo; m_midDesc = ""; m_btnClkDisp = null; }
// 代码资源加载完成处理 public void onCodeloadedByRes(UIPrefabRes res) { UIFormID ID = m_UIAttrs.GetFormIDByPath(res.GetPath(), ResPathType.ePathCodePath); // 获取 FormID m_ID2CodeLoadingItemDic.Remove(ID); addFormNoReady(m_id2FormDic[ID]); onCodeLoadedByForm(m_id2FormDic[ID]); }
public string getPath(UIFormID id) { if (m_id2AttrDic.ContainsKey(id)) { return(m_id2AttrDic[id].m_widgetPath); //ret = Ctx.m_instance.m_cfg.m_pathLst[(int)ResPathType.ePathComUI] + ret; //return ret; } return(null); }
//public T getForm<T>(UIFormID ID) where T : Form public Form getForm(UIFormID ID) { if (m_id2FormDic.ContainsKey(ID)) { return(m_id2FormDic[ID]); } else { return(null); } }
//public void loadAndShow<T>(UIFormID ID) where T : Form, new() public void loadAndShow(UIFormID ID) { if (hasForm(ID)) { showFormInternal(ID); } else { loadForm(ID); } }
// 加载窗口控件资源,窗口资源都是从文件加载 public void loadWidgetRes(UIFormID ID) { UIAttrItem attrItem = m_UIAttrs.m_id2AttrDic[ID]; if (!m_ID2WidgetLoadingItemDic.ContainsKey(ID)) // 如果什么都没有创建,第一次加载 { m_ID2WidgetLoadingItemDic[ID] = new UILoadingItem(); m_ID2WidgetLoadingItemDic[ID].m_ID = ID; loadFromFile(attrItem.m_widgetPath, onWidgetLoadEventHandle); } }
// 隐藏一个 UI private void hideFormInternal(UIFormID ID) { Form win = getForm(ID); if (win != null) { if (win.IsVisible()) { UtilApi.SetActive(win.m_GUIWin.m_uiRoot, false); win.onHide(); } } }
// 这个事加载界面需要的代码 //public void loadForm<T>(UIFormID ID) where T : Form, new() public void loadForm(UIFormID ID) { UIAttrItem attrItem = m_UIAttrs.m_id2AttrDic[ID]; Form window = getForm(ID); if (window != null) // 本地已经创建了这个窗口, { if (window.IsResReady) // 如果资源也已经加载进来了 { if (null != Ctx.m_instance.m_cbUIEvent) { Ctx.m_instance.m_cbUIEvent.onCodeFormLoaded(window); // 资源加载完成 } } } else if (!m_ID2CodeLoadingItemDic.ContainsKey(ID)) // 如果什么都没有创建,第一次加载 { // 创建窗口 Form form = null; if (attrItem.m_bNeedLua) { form = new Form(); } else { form = Ctx.m_instance.m_scriptDynLoad.getScriptObject(attrItem.m_scriptTypeName) as Form; } if (form != null) // 如果代码已经在本地 { (form as Form).id = ID; if (attrItem.m_bNeedLua) { form.luaCSBridgeForm = new LuaCSBridgeForm(attrItem.m_luaScriptTableName, form); form.luaCSBridgeForm.DoFile(attrItem.m_luaScriptPath); } addFormNoReady(form); // 仅仅是创建数据,资源还没有加载完成 onCodeLoadedByForm(form); } // 这个地方应该抛出异常 if (null == form) // 本地没有代码 { m_ID2CodeLoadingItemDic[ID] = new UILoadingItem(); m_ID2CodeLoadingItemDic[ID].m_ID = ID; loadFromFile(attrItem.m_codePath, onCodeLoadEventHandle); } } }
// 代码资源加载处理 public void onCodeLoadEventHandle(IDispatchObject dispObj) { UIPrefabRes res = dispObj as UIPrefabRes; if (res.refCountResLoadResultNotify.resLoadState.hasSuccessLoaded()) { onCodeloadedByRes(res); } else if (res.refCountResLoadResultNotify.resLoadState.hasFailed()) { UIFormID ID = m_UIAttrs.GetFormIDByPath(res.GetPath(), ResPathType.ePathCodePath); // 获取 FormID m_ID2CodeLoadingItemDic.Remove(ID); } }
// 窗口控件资源加载处理 public void onWidgetLoadEventHandle(IDispatchObject dispObj) { UIPrefabRes res = dispObj as UIPrefabRes; if (res.refCountResLoadResultNotify.resLoadState.hasSuccessLoaded()) { onWidgetloadedByRes(res); } else if (res.refCountResLoadResultNotify.resLoadState.hasFailed()) { UIFormID ID = m_UIAttrs.GetFormIDByPath(res.GetPath(), ResPathType.ePathComUI); // 获取 FormID m_ID2WidgetLoadingItemDic.Remove(ID); Ctx.m_instance.m_logSys.log("UIFormID = , Failed Prefab"); } }
// 退出一个 UI public void exitForm(UIFormID ID, bool bForce = false) { Form win = getForm(ID); if (win != null) { if (win.exitMode || bForce) { exitFormInternal(ID); } else { hideFormInternal(ID); } } }
public void showFormInternal(UIFormID ID) { Form win = getForm(ID); if (win != null) { if (!win.bReady) { win.onReady(); } if (!win.IsVisible()) { UtilApi.SetActive(win.m_GUIWin.m_uiRoot, true); win.onShow(); } } }
// 窗口控件资源加载完成处理 public void onWidgetloadedByRes(UIPrefabRes res) { string path = res.GetPath(); UIFormID ID = m_UIAttrs.GetFormIDByPath(path, ResPathType.ePathComUI); // 获取 FormID m_ID2WidgetLoadingItemDic.Remove(ID); UIAttrItem attrItem = m_UIAttrs.m_id2AttrDic[ID]; m_id2FormDic[ID].bLoadWidgetRes = true; m_id2FormDic[ID].m_GUIWin.m_uiRoot = res.InstantiateObject(attrItem.m_widgetPath); if (attrItem.m_bNeedLua) { m_id2FormDic[ID].luaCSBridgeForm.gameObject = m_id2FormDic[ID].m_GUIWin.m_uiRoot; m_id2FormDic[ID].luaCSBridgeForm.init(); } // 设置位置 UtilApi.SetParent(m_id2FormDic[ID].m_GUIWin.m_uiRoot.transform, m_canvasList[(int)attrItem.m_canvasID].layerList[(int)attrItem.m_LayerID].layerTrans, false); // 先设置再设置缩放,否则无效 m_id2FormDic[ID].m_GUIWin.m_uiRoot.transform.SetAsLastSibling(); // 放在最后 UtilApi.SetActive(m_id2FormDic[ID].m_GUIWin.m_uiRoot, false); // 出发 onShow 事件 //if (m_dicForm[ID].hideOnCreate) //{ // UtilApi.SetActive(m_dicForm[ID].m_GUIWin.m_uiRoot, false); //} if (!m_id2FormDic[ID].hideOnCreate) { showFormInternal(ID); // 如果 onShow 中调用 exit 函数,就会清掉 m_dicForm 中的内容。如果设置了 exitMode = false,就不会清掉 m_dicForm ,就不会有问题 } if (null != Ctx.m_instance.m_cbUIEvent) { if (m_id2FormDic.ContainsKey(ID)) // 如果 onShow 中调用 exit 函数,并且没有设置 exitMode = false ,就会清除 m_dicForm, 这个时候再调用这个函数,就会有问题,是不是添加延迟卸载 { Ctx.m_instance.m_cbUIEvent.onWidgetLoaded(m_id2FormDic[ID]); // 资源加载完成 } } // 卸载资源 Ctx.m_instance.m_uiPrefabMgr.unload(path, onWidgetLoadEventHandle); }
protected void exitFormInternal(UIFormID ID) { Form win = getForm(ID); if (win != null) { // 清理列表 UILayer layer = win.uiLayer; layer.winDic.Remove(ID); // 释放界面资源 win.onExit(); UtilApi.Destroy(win.m_GUIWin.m_uiRoot); win.m_GUIWin.m_uiRoot = null; // 释放加载的资源 //string path = m_UIAttrs.getPath(ID); //if (path != null) //{ // Ctx.m_instance.m_resLoadMgr.unload(path); //} UtilApi.UnloadUnusedAssets(); // 异步卸载共用资源 m_id2FormDic.Remove(ID); win = null; } }
public string getPath(UIFormID id) { if (m_id2AttrDic.ContainsKey(id)) { return m_id2AttrDic[id].m_widgetPath; //ret = Ctx.m_instance.m_cfg.m_pathLst[(int)ResPathType.ePathComUI] + ret; //return ret; } return null; }
//public T getForm<T>(UIFormID ID) where T : Form public Form getForm(UIFormID ID) { if (m_id2FormDic.ContainsKey(ID)) { return m_id2FormDic[ID]; } else { return null; } }
public bool hasForm(UIFormID ID) { return (m_id2FormDic.ContainsKey(ID)); }
// 这个事加载界面需要的代码 //public void loadForm<T>(UIFormID ID) where T : Form, new() public void loadForm(UIFormID ID) { UIAttrItem attrItem = m_UIAttrs.m_id2AttrDic[ID]; Form window = getForm(ID); if (window != null) // 本地已经创建了这个窗口, { if (window.IsResReady) // 如果资源也已经加载进来了 { if(null != Ctx.m_instance.m_cbUIEvent) { Ctx.m_instance.m_cbUIEvent.onCodeFormLoaded(window); // 资源加载完成 } } } else if (!m_ID2CodeLoadingItemDic.ContainsKey(ID)) // 如果什么都没有创建,第一次加载 { // 创建窗口 Form form = null; if (attrItem.m_bNeedLua) { form = new Form(); } else { form = Ctx.m_instance.m_scriptDynLoad.getScriptObject(attrItem.m_scriptTypeName) as Form; } if (form != null) // 如果代码已经在本地 { (form as Form).id = ID; if (attrItem.m_bNeedLua) { form.luaCSBridgeForm = new LuaCSBridgeForm(attrItem.m_luaScriptTableName, form); form.luaCSBridgeForm.DoFile(attrItem.m_luaScriptPath); } addFormNoReady(form); // 仅仅是创建数据,资源还没有加载完成 onCodeLoadedByForm(form); } // 这个地方应该抛出异常 if(null == form) // 本地没有代码 { m_ID2CodeLoadingItemDic[ID] = new UILoadingItem(); m_ID2CodeLoadingItemDic[ID].m_ID = ID; loadFromFile(attrItem.m_codePath, onCodeLoadEventHandle); } } }
public static int?OpenUIForm(this UIComponent uiComponent, UIFormID uiFormId, object userData = null) { return(uiComponent.OpenHotUIForm((int)uiFormId, uiFormId.ToString(), userData)); }
public bool hasForm(UIFormID ID) { return(m_id2FormDic.ContainsKey(ID)); }
//获取界面 public static UGUIForm GetUIForm(this UIComponent uiComponent, UIFormID uiFormId, string uiGroupName = null) { return(uiComponent.GetUIForm((int)uiFormId, uiGroupName)); }