/// <summary> /// 是否 /// </summary> /// <param name="gtype"></param> /// <returns></returns> public bool HaveUnFinishGuide(GuideDefine.GuideType gtype) { List <uint> groupids = null; if (m_dic_canDoGuideGroup.TryGetValue(gtype, out groupids) && groupids.Count > 0) { return(true); } return(false); }
private List <uint> TakeCanDoUnConstraitGuideGroup() { if (null == tempCanDoResult || tempCanDoResult.Count > 20) { tempCanDoResult = new List <uint>(); } tempCanDoResult.Clear(); if (null == tempCanDoCacheData || tempCanDoCacheData.Count > 20) { tempCanDoCacheData = new List <uint>(); } tempCanDoCacheData.Clear(); List <uint> groups = null; GuideDefine.GuideType gType = GuideDefine.GuideType.Unconstrain; if (m_dic_canDoGuideGroup.TryGetValue(gType, out groups) && groups.Count > 0) { tempCanDoCacheData = new List <uint>(); tempCanDoCacheData.AddRange(groups); for (int i = 0; i < tempCanDoCacheData.Count; i++) { if (IsDoingGroup(tempCanDoCacheData[i]) || IsGuideGroupComplete(tempCanDoCacheData[i])) { groups.Remove(tempCanDoCacheData[i]); continue; } if (!IsNeedIgnoreGroup(tempCanDoCacheData[i])) { if (!tempCanDoResult.Contains(tempCanDoCacheData[i])) { tempCanDoResult.Add(tempCanDoCacheData[i]); } } else { SilentCompleteGuideGroup(tempCanDoCacheData[i]); } } } return(tempCanDoResult); }
/// <summary> /// 获取下一个强制引导 /// </summary> /// <param name="guideId"></param> /// <returns></returns> private bool TakeNextConstraitGuide(out uint guideId) { guideId = 0; List <uint> guideIds = null; List <uint> groups = null; bool isMatch = false; GuideDefine.GuideType gType = GuideDefine.GuideType.Constraint; if (m_dic_canDoGuideGroup.TryGetValue(gType, out groups) && groups.Count > 0) { GuideDefine.LocalGuideGroupData groupData = null; GuideDefine.LocalGuideData localData = null; uint tempGuideId = 0; if (!IsDoingGuide(gType)) { do { isMatch = false; if (IsGuideGroupComplete(groups[0])) { SilentCompleteGuideGroup(groups[0]); } else { if (TryGetGuideGroupData(groups[0], out groupData) && groupData.TryGetNextStep(out guideId) && TryGetGuideLocalData(guideId, out localData) && (localData.IsStartStep || localData.TryGetPreStep(out tempGuideId) && IsGuideStepComplete(tempGuideId))) { isMatch = true; } if (isMatch && IsNeedIgnoreGroup(groups[0])) { CompleteGuide(guideId); isMatch = false; } } } while (groups.Count > 0 && !isMatch); } } return(isMatch); }
/// <summary> /// 是否正在执行该类型 /// </summary> /// <param name="guideType"></param> /// <param name="guideId"></param> /// <returns></returns> public bool IsDoingGuide(GuideDefine.GuideType guideType, uint guideId = 0) { if (guideType == GuideDefine.GuideType.Constraint) { if (guideId == 0) { return(null != CurDoConstriantGuide); } else { return(null != CurDoConstriantGuide && CurDoConstriantGuide.CurStep != 0 && CurDoConstriantGuide.CurStep == guideId); } } else if (guideType == GuideDefine.GuideType.Unconstrain) { if (guideId == 0) { return(m_dic_curDoUnConstraintGuide.Count > 0); } else { GuideDefine.LocalGuideGroupData tempGroup = null; var iemurator = m_dic_curDoUnConstraintGuide.GetEnumerator(); while (iemurator.MoveNext()) { tempGroup = iemurator.Current.Value; if (iemurator.Current.Value.CurStep != 0 && iemurator.Current.Value.CurStep == guideId) { return(true); } } } } return(false); }
/// <summary> /// 初始化数据 /// </summary> public void InitData() { if (m_bInit) { return; } m_bInit = true; GuideDefine.LocalGuideData localData = GuideDefine.LocalGuideData.Create(FirstStep); if (null == localData) { Engine.Utility.Log.Error("LocalGuideGroupData->InitData failed,data error id:{0}" + FirstStep); return; } //1、触发条件 m_lstTriggerIds = new List <uint>(); //2、忽略条件 m_lstIgnoreTriggerIds = new List <uint>(); if (null != localData.TableData) { uint tempId = 0; string[] idArrayStr = null; if (!string.IsNullOrEmpty(localData.TableData.triggerCondiIDStr)) { idArrayStr = localData.TableData.triggerCondiIDStr.Split(new char[] { '|' }); if (null != idArrayStr && idArrayStr.Length > 0) { for (int i = 0, max = idArrayStr.Length; i < max; i++) { if (string.IsNullOrEmpty(idArrayStr[i])) { continue; } if (!uint.TryParse(idArrayStr[i].Trim(), out tempId)) { continue; } if (!m_lstTriggerIds.Contains(tempId)) { m_lstTriggerIds.Add(tempId); } } } } if (!string.IsNullOrEmpty(localData.TableData.ignoreCondiStr)) { idArrayStr = localData.TableData.ignoreCondiStr.Split(new char[] { '|' }); if (null != idArrayStr && idArrayStr.Length > 0) { for (int i = 0, max = idArrayStr.Length; i < max; i++) { if (string.IsNullOrEmpty(idArrayStr[i])) { continue; } if (!uint.TryParse(idArrayStr[i].Trim(), out tempId)) { continue; } if (!m_lstIgnoreTriggerIds.Contains(tempId)) { m_lstIgnoreTriggerIds.Add(tempId); } } } } } //3、优先级 m_int_priority = localData.Priority; //4、循环触发 m_bLoopTrigger = localData.LoopTrigger; //5、引导类型 m_guideType = localData.GType; }