override public void Berecne() { base.Berecne(); var baseErgeebnis = base.Ergeebnis; if (null == baseErgeebnis) { return; } AstLabelNoDestination = Optimat.EveOnline.AuswertGbs.Extension.FirstMatchingNodeFromSubtreeBreadthFirst( MainContAst, (kandidaat) => string.Equals("noDestinationLabel", kandidaat.Name, StringComparison.InvariantCultureIgnoreCase), 2); AstMarkersParent = Optimat.EveOnline.AuswertGbs.Extension.FirstMatchingNodeFromSubtreeBreadthFirst( MainContAst, (kandidaat) => string.Equals("markersParent", kandidaat.Name, StringComparison.InvariantCultureIgnoreCase), 2); AstCurrentParent = Optimat.EveOnline.AuswertGbs.Extension.FirstMatchingNodeFromSubtreeBreadthFirst( MainContAst, (kandidaat) => string.Equals("currentParent", kandidaat.Name, StringComparison.InvariantCultureIgnoreCase), 2, 1); AstCurrentParentLabel = Optimat.EveOnline.AuswertGbs.Extension.FirstMatchingNodeFromSubtreeBreadthFirst( AstCurrentParent, (kandidaat) => string.Equals("EveLabelMedium", kandidaat.PyObjTypName, StringComparison.InvariantCultureIgnoreCase), 2, 1); AstEndParent = Optimat.EveOnline.AuswertGbs.Extension.FirstMatchingNodeFromSubtreeBreadthFirst( MainContAst, (kandidaat) => string.Equals("endParent", kandidaat.Name, StringComparison.InvariantCultureIgnoreCase), 2, 1); AstEndParentLabel = Optimat.EveOnline.AuswertGbs.Extension.FirstMatchingNodeFromSubtreeBreadthFirst( AstEndParent, (kandidaat) => string.Equals("EveLabelMedium", kandidaat.PyObjTypName, StringComparison.InvariantCultureIgnoreCase), 2, 1); MengeAstDestinationMarker = Optimat.EveOnline.AuswertGbs.Extension.MatchingNodesFromSubtreeBreadthFirst( AstMarkersParent, (kandidaat) => string.Equals("AutopilotDestinationIcon", kandidaat.PyObjTypName, StringComparison.InvariantCultureIgnoreCase), null, 2); var MengeMarker = MengeAstDestinationMarker ?.Select((astDestinationMarker) => astDestinationMarker.AsUIElementIfVisible()) ?.ToArray(); ErgeebnisScpez = new InfoPanelRoute(baseErgeebnis) { NextLabel = AstCurrentParentLabel.LargestLabelInSubtree().AsUIElementTextIfTextNotEmpty(), DestinationLabel = AstEndParentLabel.LargestLabelInSubtree().AsUIElementTextIfTextNotEmpty(), RouteElementMarker = MengeMarker?.OrdnungLabel()?.ToArray(), }; }
public void Travel_InputFrequency() { var BotSequence = new BotSequence(); var ClientPreference = new Bot.BotPreference() { TravelEnable = true }; var UIElementFactory = new Func<UIElement>(Exe.UIElementFactory.Instance.UIElementConstruct); var InfoPanelRouteWaypointMarker = UIElementFactory(); var InfoPanelRoute = new InfoPanelRoute(new InfoPanel(UIElementFactory(), true, UIElementFactory()), null, null, new[] { InfoPanelRouteWaypointMarker }); var ShipUiHitpoints = new ShipHitpointsAndEnergy(1000, 1000, 1000, 700); var ShipUiModule = new ShipUiModule(UIElementFactory(), true, null, null, false, null, null, null, null); var ShipUi = new ShipUi(UIElementFactory(), UIElementFactory(), new ShipUiIndication(UIElementFactory(), null), ShipUiHitpoints, null, null, null, null, new[] { ShipUiModule }); var Menu = new BotEngine.EveOnline.Sensor.Menu(UIElementFactory(), new[] { new MenuEntry(new UIElementLabelString(UIElementFactory(), TravelInfoPanelRouteParam.MenuEntryJumpLabel)) }); var Measurement = new MemoryMeasurement() { InfoPanelRoute = InfoPanelRoute, // ShipUI tells the Bot that char is in Space. ShipUi = ShipUi }; bool MenuOpen = false; var MeasurementCurrent = new Func<MemoryMeasurement>(() => { Measurement.Menu = MenuOpen ? new[] { Menu } : null; return Measurement; }); var ListInputMenuCountMin = 2; var ListTaskMenuOpenTime = new List<Int64>(); var ListTaskMenuEntryActivateTime = new List<Int64>(); var ListTaskModuleMeasureTime = new List<Int64>(); BotSequence.SequenceStep( MeasurementCurrent, () => ClientPreference, Bot => { var BotTime = Bot.Time().Value; var RecommendedMotion = Bot.ExtractRecommendedMotion() ?.ToArray(); var Status = Bot.ToUserReport?.TravelTask?.CurrentInstant?.ExtractStatus(); var ListPathToClientTask = Bot.ToUserReport?.TravelTask?.CurrentInstant?.ExtractPathToClientNode()?.ToArray(); var ListTaskFlat = ListPathToClientTask.ConcatNullable()?.Distinct()?.ToArray(); var TaskMenuOpen = RecommendedMotion ?.FirstOrDefault(Node => (Node.Param as MotionParam).ContainsUIElement(InfoPanelRouteWaypointMarker)); var TaskMenuEntryActivate = RecommendedMotion ?.FirstOrDefault(Node => (Node.Param as MotionParam).ContainsUIElement(Menu?.ListEntry?.FirstOrDefault())); var TaskModuleMeasure = RecommendedMotion ?.FirstOrDefault(Node => (Node.Param as MotionParam).ContainsUIElement(ShipUiModule)); if (null != TaskMenuOpen) { MenuOpen = true; BotSequence.TaskMarkAsCompleted(TaskMenuOpen.IdAtBot); if (0 < ListTaskMenuOpenTime.Count) { var Distance = BotTime - ListTaskMenuOpenTime.Last(); Assert.Greater(Distance, TravelInfoPanelRouteParam.InputNextManeuverDistanceMin - 1111, "menu open.distance min"); Assert.Less(Distance, TravelInfoPanelRouteParam.InputNextManeuverDistanceMin + 1111, "menu open.distance max"); } ListTaskMenuOpenTime.Add(BotTime); } if (null != TaskMenuEntryActivate) { MenuOpen = false; BotSequence.TaskMarkAsCompleted(TaskMenuEntryActivate.IdAtBot); var DistanceToMenuOpen = BotTime - ListTaskMenuOpenTime.Last(); Assert.Less(DistanceToMenuOpen, 1111, "menu entry activate.distance max"); ListTaskMenuEntryActivateTime.Add(BotTime); } if (null != TaskModuleMeasure) { ListTaskModuleMeasureTime.Add(BotTime); } }, (int)1e+5); Assert.GreaterOrEqual(ListTaskMenuOpenTime.Count, ListInputMenuCountMin, "input menu count min"); Assert.GreaterOrEqual(ListTaskModuleMeasureTime.Count, 4, "module measure"); }