/// <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); }
/// <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 }); } }
/// <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)); } }
/// <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); }
/// <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}"); } }
/// <summary> /// 跳转到指定的界面 /// </summary> /// <param name="dmGuid"></param> /// <param name="type"></param> public static void GoTo(string dmGuid, WlyViewType type) { GoTo(dmGuid, type, TimeSpan.FromMilliseconds(100)); }
/// <summary> /// 获取指定的界面对象 /// </summary> /// <param name="type"></param> /// <returns></returns> public static IWlyUIView GetView(WlyViewType type) { return(_viewList.FirstOrDefault(o => o.Type == type)); }
/// <summary> /// 构造函数 /// </summary> public WlyViewAttribute(WlyViewType type) { Type = type; }
/// <summary> /// 是否能从本界面前往指定的界面 /// </summary> /// <param name="type"></param> /// <param name="dmGuid"></param> /// <returns></returns> public bool CanGoTo(WlyViewType type, string dmGuid) { return(m_viewMap.ContainsKey(type)); }