Example #1
0
        /// <summary>
        /// 与指定界面的距离
        /// </summary>
        /// <param name="type"></param>
        /// <returns></returns>
        public int GetLength(WlyViewType type)
        {
            if (m_viewMap.ContainsKey(type))
            {
                return(m_viewMap[type].Length);
            }

            return(WlyViewMgr.LevelMax);
        }
Example #2
0
 /// <summary>
 /// 添加跳转逻辑
 /// </summary>
 /// <param name="type"></param>
 /// <param name="handler"></param>
 protected void AddHandler(WlyViewType type, Action <string> handler)
 {
     if (!m_transferHandlers.ContainsKey(type))
     {
         m_transferHandlers.TryAdd(type, handler);
         m_viewMap.TryAdd(type, new TransferPath
         {
             Target = type,
             Length = 1
         });
     }
 }
Example #3
0
        /// <summary>
        /// 选择武将
        /// </summary>
        /// <param name="dmGuid"></param>
        /// <param name="staff"></param>
        /// <param name="view"></param>
        public static void SelectStaff(string dmGuid, WlyStaffType staff, WlyViewType view)
        {
            // 首先跳转到训练界面
            WlyViewMgr.GoTo(dmGuid, view);
            if (!WlyUtilityBiz.SelectStaffInList(dmGuid, staff))
            {
                GetStaff(dmGuid, staff);
                WlyViewMgr.GoTo(dmGuid, view);
                WlyUtilityBiz.SelectStaffInList(dmGuid, staff);
            }

            if (DMService.Instance.FindStr(dmGuid, new WxRect(529, 321, 562, 341), "取消", WlyColor.Normal))
            {
                DMService.Instance.LeftClick(dmGuid, new WxPoint(546, 329));
            }
        }
Example #4
0
        /// <summary>
        /// 从当前界面前往指定的界面
        /// </summary>
        /// <param name="type"></param>
        /// <param name="dmGuid"></param>
        /// <returns></returns>
        public bool GoTo(WlyViewType type, string dmGuid)
        {
            if (!m_viewMap.ContainsKey(type))
            {
                Exit(dmGuid);
                return(true);
            }

            var result = m_transferHandlers.TryGetValue(m_viewMap[type].Target, out var handler);

            if (!result)
            {
                throw new InvalidOperationException($"无法前往界面{type}");
            }

            handler(dmGuid);
            return(true);
        }
Example #5
0
        /// <summary>
        /// 跳转到指定的界面
        /// </summary>
        /// <param name="dmGuid"></param>
        /// <param name="type"></param>
        /// <param name="interval"></param>
        public static void GoTo(string dmGuid, WlyViewType type, TimeSpan interval)
        {
            bool Handler()
            {
                // 首先确定当前处于哪个界面,由于可能处于过渡界面,需要一定的等待时间
                IEnumerable <IWlyUIView> views = null;
                var wait = FlowLogicHelper.RepeatRun(() =>
                {
                    views = _viewList.Where(o => o.IsCurrentView(dmGuid));
                    if (!views.Any())
                    {
                        var res = DMService.Instance.FindPic(dmGuid, WlyPicType.关闭按钮, WlyUtilityBiz.GameWndRect, out var x, out var y);
                        if (res)
                        {
                            DMService.Instance.LeftClick(dmGuid, new WxPoint(x, y));
                        }
                    }

                    return(views.Any());
                }, TimeSpan.FromSeconds(30));

                if (!wait)
                {
                    throw new InvalidOperationException("无法确定当前属于哪个界面");
                }

                if (views.Any(o => o.Type == type))
                {
                    return(true);
                }

                var groups = views.GroupBy(o => o.CanGoTo(type, dmGuid));
                var ev     = groups.FirstOrDefault(o => !o.Key);

                if (ev != null)
                {
                    foreach (var v in ev)
                    {
                        v.Exit(dmGuid);
                    }
                }

                var gv = groups.FirstOrDefault(o => o.Key)?.ToList();

                if (gv != null)
                {
                    var cv    = gv.First();
                    var level = LevelMax;
                    foreach (var v in gv)
                    {
                        var length = v.GetLength(type);
                        if (length < level)
                        {
                            level = length;
                            cv    = v;
                        }
                    }

                    cv.GoTo(type, dmGuid);
                }

                Thread.Sleep(100);
                return(false);
            }

            var result = FlowLogicHelper.RepeatRun(() =>
            {
                if (Handler())
                {
                    return(true);
                }

                Thread.Sleep(interval);
                return(false);
            }, TimeSpan.FromSeconds(30));

            if (!result)
            {
                throw new InvalidOperationException($"无法切换到界面 {type}");
            }
        }
Example #6
0
 /// <summary>
 /// 跳转到指定的界面
 /// </summary>
 /// <param name="dmGuid"></param>
 /// <param name="type"></param>
 public static void GoTo(string dmGuid, WlyViewType type)
 {
     GoTo(dmGuid, type, TimeSpan.FromMilliseconds(100));
 }
Example #7
0
 /// <summary>
 /// 获取指定的界面对象
 /// </summary>
 /// <param name="type"></param>
 /// <returns></returns>
 public static IWlyUIView GetView(WlyViewType type)
 {
     return(_viewList.FirstOrDefault(o => o.Type == type));
 }
Example #8
0
 /// <summary>
 /// 构造函数
 /// </summary>
 public WlyViewAttribute(WlyViewType type)
 {
     Type = type;
 }
Example #9
0
 /// <summary>
 /// 是否能从本界面前往指定的界面
 /// </summary>
 /// <param name="type"></param>
 /// <param name="dmGuid"></param>
 /// <returns></returns>
 public bool CanGoTo(WlyViewType type, string dmGuid)
 {
     return(m_viewMap.ContainsKey(type));
 }