/// <summary> /// 刷新新功能UI状态 /// </summary> /// <param name="funcId"></param> private void RefreshNewFuncUIStatus(uint funcId) { GuideDefine.LocalFuncOpenData localData = null; if (null != m_dic_funcOpenDatas && m_dic_funcOpenDatas.TryGetValue(funcId, out localData)) { PanelID dependPanelId = localData.FuncCreateObjPathData.DependPanelId; if (dependPanelId == PanelID.None || !DataManager.Manager <UIPanelManager>().IsShowPanel(dependPanelId)) { //Engine.Utility.Log.Error("GuideManger->RefreshNewFuncUIStatus faield,relative panel panelId:{0}" // , localData.FuncCreateObjPathData.DependPanelId); return; } GameObject obj = localData.CreateFuncObj; if (null != obj) { bool funcOpen = IsNewFuncOpen(funcId); if (funcOpen && localData.NeedSort) { obj.transform.localPosition = GetNewFuncObjTargetPos(funcId); } if (obj.activeSelf != funcOpen) { obj.SetActive(funcOpen); } } } else { Engine.Utility.Log.Error("GuideManger->RefreshNewFuncUIStatus faield,can't found funcId:{0}", funcId); } }
/// <summary> /// 获取已开启功能按钮的目标位置 /// </summary> /// <param name="newFuncId"></param> /// <returns></returns> private Vector3 GetNewFuncObjTargetPos(uint newFuncId) { Vector3 pos = Vector3.zero; GuideDefine.LocalFuncOpenData openData = null; int funcIndex = 0; if (TryGetFuncOpenData(newFuncId, out openData) && TryGetFunctionSortIndex(openData.SortGroup, newFuncId, out funcIndex)) { pos += funcIndex * openData.FuncObjGap; } return(pos); }
/// <summary> /// 是否该功能开启 /// </summary> /// <param name="funcId"></param> /// <returns></returns> public bool IsNewFuncOpen(uint funcId) { GuideDefine.LocalFuncOpenData localOpenData = null; if (!TryGetFuncOpenData(funcId, out localOpenData)) { return(false); } if (null != m_lst_alreadyDoFuncOpen && m_lst_alreadyDoFuncOpen.Contains(funcId) && !IsMatchTriggerCondition(localOpenData.CloseTriggerId)) { return(true); } return(false); }
/// <summary> /// 初始化功能开启提示 /// </summary> private void InitFuncOpenData() { if (null == m_lst_alreadyDoFuncOpen) { m_lst_alreadyDoFuncOpen = new List <uint>(); } if (null == m_lst_canDoFuncOpen) { m_lst_canDoFuncOpen = new List <uint>(); } if (null == m_lst_closeFuncOpen) { m_lst_closeFuncOpen = new List <uint>(); } if (null == m_dic_completeFuncSort) { m_dic_completeFuncSort = new Dictionary <int, List <uint> >(); } m_dic_funcOpenDatas = new Dictionary <uint, GuideDefine.LocalFuncOpenData>(); m_FuncCommonNoticesQ = new System.Collections.Queue(); List <table.NewFUNCOpenDataBase> newFuncOpenData = GameTableManager.Instance.GetTableList <table.NewFUNCOpenDataBase>(); if (null != newFuncOpenData) { GuideDefine.LocalFuncOpenData localData = null; table.NewFUNCOpenDataBase tempdb = null; for (int i = 0; i < newFuncOpenData.Count; i++) { tempdb = newFuncOpenData[i]; if (null == tempdb) { continue; } if (!m_dic_funcOpenDatas.ContainsKey(tempdb.openFuncID)) { localData = GuideDefine.LocalFuncOpenData.Create(tempdb.openFuncID); m_dic_funcOpenDatas.Add(tempdb.openFuncID, localData); } } } }
/// <summary> /// 新功能关闭 /// </summary> /// <param name="funcOpenId"></param> private void CloseNewFuncOpen(uint funcOpenId) { GuideDefine.LocalFuncOpenData data = null; if (TryGetFuncOpenData(funcOpenId, out data)) { bool needRefresh = false; if (m_lst_alreadyDoFuncOpen.Contains(funcOpenId)) { needRefresh = true; m_lst_alreadyDoFuncOpen.Remove(funcOpenId); } if (m_lst_canDoFuncOpen.Contains(funcOpenId)) { needRefresh = true; m_lst_canDoFuncOpen.Remove(funcOpenId); } if (m_lst_closeFuncOpen.Contains(funcOpenId)) { needRefresh = true; m_lst_closeFuncOpen.Add(funcOpenId); } List <uint> sortGroupIDs = null; if (m_dic_completeFuncSort.TryGetValue(data.SortGroup, out sortGroupIDs) && sortGroupIDs.Contains(funcOpenId)) { needRefresh = true; sortGroupIDs.Remove(funcOpenId); } RefreshNewFuncUIStatus(funcOpenId); if (data.NeedSort) { if (needRefresh) { DoRefreshNewFuncOpenStaus(data.SortGroup); } } } }
/// <summary> /// 获取已经激活功能 /// </summary> /// <returns></returns> public List <uint> GetActiveFuncId() { List <uint> activefuncId = new List <uint>(); if (null != m_lst_alreadyDoFuncOpen) { GuideDefine.LocalFuncOpenData localData = null; for (int i = 0; i < m_lst_alreadyDoFuncOpen.Count; i++) { if (!m_dic_funcOpenDatas.TryGetValue(m_lst_alreadyDoFuncOpen[i], out localData)) { continue; } if (!activefuncId.Contains(localData.FuncOpenId)) { activefuncId.Add(localData.FuncOpenId); } } } return(activefuncId); }
/// <summary> /// 是否新功能开启UI准备好 /// </summary> /// <param name="isSkillOpen">是否为技能</param> /// <param name="newFuncOpenId"></param> /// <returns></returns> public bool IsNewFuncUIStatusReady(GuideDefine.FuncOpenShowData showData) { PanelID targetPanelId = PanelID.None; if (showData.FOT == GuideDefine.FuncOpenType.Skill) { targetPanelId = PanelID.MainPanel; } else if (showData.FOT == GuideDefine.FuncOpenType.Base) { GuideDefine.LocalFuncOpenData localdata = GuideDefine.LocalFuncOpenData.Create(showData.FuncOpenId); if (null != localdata) { targetPanelId = localdata.FlyToTargetDependPanel; } } if (targetPanelId == PanelID.None) { return(false); } return(DataManager.Manager <UIPanelManager>().IsPanelFocus(targetPanelId)); }
/// <summary> /// 添加新功能提醒到缓存 /// </summary> /// <param name="showData"></param> private void OnNewFuncOpenAdd(GuideDefine.FuncOpenShowData showData) { if (null != showData) { bool add = false; if (showData.FOT == GuideDefine.FuncOpenType.Base) { GuideDefine.LocalFuncOpenData localdata = m_dic_funcOpenDatas[showData.FuncOpenId]; if (IsNeedIgnoreByCondi(localdata.IgnoreCondi)) { CompleteNewFuncOpen(showData); } else if (!m_lst_canDoFuncOpen.Contains(showData.FuncOpenId)) { //1、添加到新功能提醒列表 m_lst_canDoFuncOpen.Add(showData.FuncOpenId); //2、根据优先级排序 m_lst_canDoFuncOpen.Sort((left, right) => { return(GuideDefine.LocalFuncOpenData.CompareFuncOpenPriority(left, right)); }); add = true; } } else if (showData.FOT == GuideDefine.FuncOpenType.Skill) { int count = m_FuncCommonNoticesQ.Count + 1; m_FuncCommonNoticesQ.Enqueue(showData); add = true; } if (add) { //执行下一个工作流 Engine.Utility.EventEngine.Instance().DispatchEvent((int)Client.GameEventID.UIEVENTDOGUIDEWORKFLOW); } } }
/// <summary> /// 获取下一个新功能开启ID /// </summary> /// <param name="funcId"></param> /// <returns></returns> public bool TakeNextNewFuncOpen(out GuideDefine.FuncOpenShowData showData) { showData = null; if (null != m_FuncCommonNoticesQ && m_FuncCommonNoticesQ.Count != 0 && null != m_FuncCommonNoticesQ.Peek()) { showData = (GuideDefine.FuncOpenShowData)m_FuncCommonNoticesQ.Peek(); return(true); } else if (null != m_lst_canDoFuncOpen && m_lst_canDoFuncOpen.Count > 0) { GuideDefine.LocalFuncOpenData db = null; bool match = false; do { db = GuideDefine.LocalFuncOpenData.Create(m_lst_canDoFuncOpen[0]); showData = db.ShowData; if (!IsNeedIgnoreByCondi(db.IgnoreCondi) && !m_lst_alreadyDoFuncOpen.Contains(db.FuncOpenId)) { match = true; } else { CompleteNewFuncOpen(showData); } } while (!match && m_lst_canDoFuncOpen.Count > 0); if (match) { return(true); } } return(false); }
/// <summary> /// 添加到已完成功能提示列表 /// </summary> /// <param name="funcId"></param> private void CompleteNewFuncOpen(GuideDefine.FuncOpenShowData showData) { if (null == showData) { return; } if (showData.FOT == GuideDefine.FuncOpenType.Base) { //1、从当前新功能开启列表中移除 if (null != m_lst_canDoFuncOpen && m_lst_canDoFuncOpen.Contains(showData.FuncOpenId)) { m_lst_canDoFuncOpen.Remove(showData.FuncOpenId); } bool add = false; //2、并添加到已完成提醒功能列表 if (null != m_lst_alreadyDoFuncOpen && !m_lst_alreadyDoFuncOpen.Contains(showData.FuncOpenId)) { m_lst_alreadyDoFuncOpen.Add(showData.FuncOpenId); add = true; } GuideDefine.LocalFuncOpenData openData = null; if (TryGetFuncOpenData(showData.FuncOpenId, out openData)) { if (openData.NeedSort) { List <uint> sortIds = null; bool needRefreshUI = false; if (!m_dic_completeFuncSort.TryGetValue(openData.SortGroup, out sortIds)) { sortIds = new List <uint>(); sortIds.Add(showData.FuncOpenId); m_dic_completeFuncSort.Add(openData.SortGroup, sortIds); needRefreshUI = true; } else if (!sortIds.Contains(showData.FuncOpenId)) { sortIds.Add(showData.FuncOpenId); sortIds.Sort((left, right) => { GuideDefine.LocalFuncOpenData leftData = null; GuideDefine.LocalFuncOpenData rightData = null; if (TryGetFuncOpenData(left, out leftData) && TryGetFuncOpenData(right, out rightData)) { return(leftData.SortID - rightData.SortID); } return(0); }); needRefreshUI = true; } if (needRefreshUI) { DoRefreshNewFuncOpenStaus(openData.SortGroup); } } else if (null != openData.CreateFuncObj && !openData.CreateFuncObj.activeSelf) { openData.CreateFuncObj.SetActive(true); } } if (add) { Engine.Utility.EventEngine.Instance().DispatchEvent((int)Client.GameEventID.UIEVENTNEWFUNCOPEN, showData.FuncOpenId); //发送已完成消息 SendNewFuncOpenComplete(showData.FuncOpenId); } } else if (showData.FOT == GuideDefine.FuncOpenType.Skill) { if (null != m_FuncCommonNoticesQ && m_FuncCommonNoticesQ.Count != 0) { GuideDefine.FuncOpenShowData cacheShowData = (GuideDefine.FuncOpenShowData)m_FuncCommonNoticesQ.Peek(); if (cacheShowData.FuncOpenId == showData.FuncOpenId) { //取出第一个 m_FuncCommonNoticesQ.Dequeue(); } } } m_currentFuncOpenShowData = null; Engine.Utility.EventEngine.Instance().DispatchEvent((int)Client.GameEventID.UIEVENTNEWFUNCCOMPLETE, showData); }
/// <summary> /// 尝试获取功能开启数据 /// </summary> /// <param name="funcId"></param> /// <param name="data"></param> /// <returns></returns> public bool TryGetFuncOpenData(uint funcId, out GuideDefine.LocalFuncOpenData data) { return(m_dic_funcOpenDatas.TryGetValue(funcId, out data)); }