/// <summary> /// 更新UI使用的数据 /// </summary> /// <param name="uiMsg">数据</param> public void SendMessage(UIMsgData uiMsg) { //所有的消息会被派发给子窗口 // var keys = subWindowsMap.Keys.ToList(); // for (int i = 0; i < keys.Count; i++) // { // var k = keys[i]; // subWindowsMap[k].SendMessage(uiMsg); // } //通知子窗口 foreach (var subWin in subWindowsMap.Values) { subWin.SendMessage(uiMsg); } //TODO: 执行完Invoke会导致 map的堆栈出问题, MethodInfo method = null; var key = uiMsg.GetType(); bool flag = this.msgCallbackMap.TryGetValue(key, out method); if (flag) { method.Invoke(this, new object[] { uiMsg }); } }
/// <summary> /// 显示窗口 /// </summary> /// <param name="uiIndex">窗口枚举</param> public void ShowWindow(Enum index, UIMsgData uiMsgData = null, bool resetMask = true, UILayer layer = UILayer.Bottom) { int uiIndex = index.GetHashCode(); if (windowMap.ContainsKey(uiIndex)) { var v = windowMap[uiIndex] as IComponent; if (!v.IsOpen && v.IsLoad) { switch (layer) { case UILayer.Bottom: v.Transform.SetParent(this.Bottom, false); break; case UILayer.Center: v.Transform.SetParent(this.Center, false); break; case UILayer.Top: v.Transform.SetParent(this.Top, false); break; default: break; } v.Transform.SetAsLastSibling(); v.Open(uiMsgData); //effect } else { Debug.LogErrorFormat("UI处于[unload,lock,open]状态之一:{0}", uiIndex); } AddToHistory(index.GetHashCode()); } else { Debug.LogErrorFormat("未加载UI:{0}", uiIndex); } }
/// <summary> /// 显示窗口 /// </summary> /// <param name="index"></param> /// <param name="uiMsgData"></param> /// <param name="resetMask"></param> /// <param name="layer"></param> /// <param name="isAddToHistory"></param> private void ShowWindow(int uiIdx, UIMsgData uiMsgData = null, bool resetMask = true, UILayer layer = UILayer.Bottom, bool isAddToHistory = true) { if (windowMap.ContainsKey(uiIdx)) { var win = windowMap[uiIdx]; var winCom = win as IComponent; if (!winCom.IsOpen && winCom.IsLoad) { switch (layer) { case UILayer.Bottom: winCom.Transform.SetParent(this.Bottom, false); break; case UILayer.Center: winCom.Transform.SetParent(this.Center, false); break; case UILayer.Top: winCom.Transform.SetParent(this.Top, false); break; } winCom.Transform.SetAsLastSibling(); win.Open(uiMsgData); //effect } else { Debug.LogErrorFormat("UI处于[unload,lock,open]状态之一:{0}", uiIdx); } if (isAddToHistory) { AddToHistory(uiIdx); } } else { Debug.LogErrorFormat("未加载UI:{0}", uiIdx); } }
/// <summary> /// 外部推送ui数据 /// </summary> /// <param name="uiIndex"></param> /// <param name="uiMsg"></param> public void SendMessage(Enum index, UIMsgData uiMsg) { var uiIndex = index.GetHashCode(); IWindow win; if (windowMap.TryGetValue(uiIndex, out win)) { win.SendMessage(uiMsg); return; } //存入缓存 List <UIMsgData> list = null; uiDataCacheMap.TryGetValue(uiIndex, out list); // if (list == null) { list = new List <UIMsgData>(); uiDataCacheMap[uiIndex] = list; } list.Add(uiMsg); }
/// <summary> /// 打开 /// </summary> virtual public void Open(UIMsgData uiMsg = null) { this.IsOpen = true; this.Transform.gameObject.SetActive(true); }
/// <summary> /// 打开 /// 这里是IWindow的接口 /// </summary> /// <param name="uiMsg"></param> public override void Open(UIMsgData uiMsg = null) { base.Open(uiMsg); this.State.TriggerEvent <OnWindowOpen>(); }
/// <summary> /// 显示窗口 /// </summary> /// <param name="uiIndex">窗口枚举</param> public void ShowWindow(Enum uiEnumIdx, UIMsgData uiMsgData = null, bool resetMask = true, UILayer layer = UILayer.Bottom, bool isAddToHistory = true) { int uiIdx = uiEnumIdx.GetHashCode(); this.ShowWindow(uiIdx, uiMsgData, resetMask, layer, isAddToHistory); }