Beispiel #1
0
    /// <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);
    }
Beispiel #2
0
    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);
    }
Beispiel #3
0
    /// <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);
    }
Beispiel #4
0
 /// <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);
 }
Beispiel #5
0
        /// <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;
        }