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"); }
public void Berecne() { if (!(LayerShipUiNode?.VisibleIncludingInheritance ?? false)) { return; } ShipUIContainerAst = LayerShipUiNode?.FirstMatchingNodeFromSubtreeBreadthFirst(kandidaat => string.Equals("ShipUIContainer", kandidaat.PyObjTypName, StringComparison.InvariantCultureIgnoreCase) || string.Equals("ShipHudContainer", kandidaat.PyObjTypName, StringComparison.InvariantCultureIgnoreCase), // 2015.05.00 Singularity 2, 1); EwarUIContainerAst = LayerShipUiNode?.FirstMatchingNodeFromSubtreeBreadthFirst(kandidaat => string.Equals("EwarUIContainer", kandidaat.PyObjTypName, StringComparison.InvariantCultureIgnoreCase) || string.Equals("EwarContainer", kandidaat.PyObjTypName, StringComparison.InvariantCultureIgnoreCase) || // 2015.05.00 Singularity string.Equals("BuffBarContainer", kandidaat.PyObjTypName, StringComparison.InvariantCultureIgnoreCase), // 2017-12-20 Process Measurement 0E078DF56834065378574C9319212CF6D01A114E 2, 1); TimersContainerAst = LayerShipUiNode?.FirstMatchingNodeFromSubtreeBreadthFirst(kandidaat => kandidaat.PyObjTypNameIsContainer() && string.Equals("timers", kandidaat.Name, StringComparison.InvariantCultureIgnoreCase), 2, 1); var CapacitorContainerAst = LayerShipUiNode?.FirstMatchingNodeFromSubtreeBreadthFirst(k => k.PyObjTypNameEqualsIgnoreCase("CapacitorContainer")); MengeTimerKandidaatAst = TimersContainerAst?.ListChild; EwarUIContainerMengeEWarElementKandidaatAst = EwarUIContainerAst?.MatchingNodesFromSubtreeBreadthFirst(kandidaat => (kandidaat?.VisibleIncludingInheritance ?? false) && (kandidaat?.PyObjTypNameEqualsIgnoreCase("BuffSlotParent") ?? false), null, 2, 1); EwarUIContainerMengeEWarElementKandidaatAuswert = EwarUIContainerMengeEWarElementKandidaatAst ?.Select(kandidaatAst => { var Auswert = new SictAuswertGbsShipUiEWarElement(kandidaatAst); Auswert.Berecne(); return(Auswert); }).ToArray(); EwarUIContainerMengeEWarElementKandidaatAuswertErgeebnis = EwarUIContainerMengeEWarElementKandidaatAuswert ?.Select(auswert => auswert.Ergeebnis) .WhereNotDefault() .ToArray(); ContainerPowerCoreAst = ShipUIContainerAst?.FirstMatchingNodeFromSubtreeBreadthFirst(kandidaat => string.Equals("powercore", kandidaat.Name, StringComparison.InvariantCultureIgnoreCase), 2, 1); var ContainerPowerCoreHint = ContainerPowerCoreAst?.Hint; ContainerPowerCoreMengeMarkAst = ContainerPowerCoreAst?.MatchingNodesFromSubtreeBreadthFirst(kandidaat => string.Equals("Sprite", kandidaat.PyObjTypName, StringComparison.InvariantCultureIgnoreCase) && string.Equals("pmark", kandidaat.Name, StringComparison.InvariantCultureIgnoreCase), null, 2, 1); if (null != ContainerPowerCoreMengeMarkAst) { ContainerPowerCoreMengeMarkAinAnzaal = ContainerPowerCoreMengeMarkAst ?.Count((node) => 700 < node?.Color.Value.OMilli); } var FensterGaugeReadout = LayerShipUiNode?.FirstMatchingNodeFromSubtreeBreadthFirst(kandidaat => string.Equals("gaugeReadout", kandidaat.Name, StringComparison.InvariantCultureIgnoreCase)); var UnderMainAst = LayerShipUiNode?.FirstMatchingNodeFromSubtreeBreadthFirst(kandidaat => string.Equals("underMain", kandidaat.Name, StringComparison.InvariantCultureIgnoreCase)); var SpeedNeedleAst = UnderMainAst?.FirstMatchingNodeFromSubtreeBreadthFirst((kandidaat) => string.Equals("Transform", kandidaat.PyObjTypName, StringComparison.InvariantCultureIgnoreCase) && Regex.Match(kandidaat.Name ?? "", "speedNeedle", RegexOptions.IgnoreCase).Success); var HPGaugesAst = LayerShipUiNode?.FirstMatchingNodeFromSubtreeBreadthFirst( k => string.Equals("HPGauges", k?.PyObjTypName, StringComparison.InvariantCultureIgnoreCase)) ?? LayerShipUiNode; var SpeedGaugeAst = LayerShipUiNode?.FirstMatchingNodeFromSubtreeBreadthFirst( k => string.Equals("SpeedGauge", k?.PyObjTypName, StringComparison.InvariantCultureIgnoreCase)) ?? LayerShipUiNode; ButtonStopAst = LayerShipUiNode?.FirstMatchingNodeFromSubtreeBreadthFirst(k => k?.NameEqualsIgnoreCase("stopButton") ?? false) ?? // 2015.08.26 Singularity LayerShipUiNode?.FirstMatchingNodeFromSubtreeBreadthFirst(k => k?.PyObjTypNameEqualsIgnoreCase("StopButton") ?? false); var ReadoutContainerAst = LayerShipUiNode?.FirstMatchingNodeFromSubtreeBreadthFirst(k => (k?.PyObjTypNameIsContainer() ?? false) && (k?.NameMatchesRegex(ReadoutContainerAstNameRegex) ?? false)); var ReadoutLabel = ReadoutContainerAst.ExtraktMengeLabelString()?.OrdnungLabel()?.ToArray(); var SpeedLabel = SpeedGaugeAst?.LargestLabelInSubtree(); var StructureGaugeSpriteAst = HPGaugesAst?.FirstMatchingNodeFromSubtreeBreadthFirst(kandidaat => string.Equals("structureGauge", kandidaat.Name, StringComparison.InvariantCultureIgnoreCase)); var ArmorGaugeSpriteAst = HPGaugesAst?.FirstMatchingNodeFromSubtreeBreadthFirst(kandidaat => string.Equals("armorGauge", kandidaat.Name, StringComparison.InvariantCultureIgnoreCase)); var ShieldGaugeSpriteAst = HPGaugesAst?.FirstMatchingNodeFromSubtreeBreadthFirst(kandidaat => string.Equals("shieldGauge", kandidaat.Name, StringComparison.InvariantCultureIgnoreCase)); var StructureGaugeSpriteHint = StructureGaugeSpriteAst?.Hint; var ArmorGaugeSpriteHint = ArmorGaugeSpriteAst?.Hint; var ShieldGaugeSpriteHint = ShieldGaugeSpriteAst?.Hint; var SlotsAst = LayerShipUiNode?.FirstMatchingNodeFromSubtreeBreadthFirst(kandidaat => string.Equals("slotsContainer", kandidaat.Name, StringComparison.InvariantCultureIgnoreCase), 4) ?? // 2015.08.25 Beobact Singularity LayerShipUiNode?.FirstMatchingNodeFromSubtreeBreadthFirst(k => k.PyObjTypNameEqualsIgnoreCase("SlotsContainer")); AstIndicationContainer = LayerShipUiNode?.FirstMatchingNodeFromSubtreeBreadthFirst(kandidaat => string.Equals("indicationContainer", kandidaat.Name, StringComparison.InvariantCultureIgnoreCase), 4, 1); var indication = AstIndicationContainer?.AlsContainer(); AuswertSlots = new SictAuswertGbsShipUiSlots(SlotsAst); AuswertSlots.Berecne(); var MengeModule = AuswertSlots.ListModuleButton; ShipHitpointsAndEnergy ShipTreferpunkte = null; var ContainerPowerCoreMengeMarkAstAnzaal = ContainerPowerCoreMengeMarkAst?.Count(); int?CapacitorCapacityNormiirtMili = null; if (0 < ContainerPowerCoreMengeMarkAstAnzaal) { CapacitorCapacityNormiirtMili = (ContainerPowerCoreMengeMarkAinAnzaal * 1000) / (int?)ContainerPowerCoreMengeMarkAstAnzaal; } CapacitorCapacityNormiirtMili = CapacitorCapacityNormiirtMili ?? ((int?)(CapacitorContainerAst?.LastSetCapacitorFloat * 1e+3)); ShipTreferpunkte = new ShipHitpointsAndEnergy() { Struct = (int?)((LayerShipUiNode.StructureLevel ?? StructureGaugeSpriteAst?.LastValueFloat) * 1e+3), Armor = (int?)((LayerShipUiNode.ArmorLevel ?? ArmorGaugeSpriteAst?.LastValueFloat) * 1e+3), Shield = (int?)((LayerShipUiNode.ShieldLevel ?? ShieldGaugeSpriteAst?.LastValueFloat) * 1e+3), Capacitor = CapacitorCapacityNormiirtMili, }; var ButtonStop = ButtonStopAst?.AsUIElementIfVisible(); var ButtonSpeedMax = LayerShipUiNode?.FirstMatchingNodeFromSubtreeBreadthFirst(k => k?.PyObjTypNameEqualsIgnoreCase("MaxSpeedButton") ?? false) .AsUIElementIfVisible(); var ListeTimer = MengeTimerKandidaatAst?.Select(AlsTimer)?.OrdnungLabel()?.ToArray(); var squadronsUINode = LayerShipUiNode ?.FirstMatchingNodeFromSubtreeBreadthFirst(node => node.PyObjTypNameMatchesRegexPatternIgnoreCase("SquadronsUI")); Ergeebnis = new ShipUi(null) { Center = (ContainerPowerCoreAst ?? CapacitorContainerAst).AsUIElementIfVisible().WithRegionSizePivotAtCenter(new Vektor2DInt(40, 40)), Indication = indication, HitpointsAndEnergy = ShipTreferpunkte, SpeedLabel = SpeedLabel?.AsUIElementTextIfTextNotEmpty(), EWarElement = EwarUIContainerMengeEWarElementKandidaatAuswertErgeebnis, Timer = ListeTimer, ButtonSpeed0 = ButtonStop, ButtonSpeedMax = ButtonSpeedMax, Module = MengeModule, SpeedMilli = (Int64?)(LayerShipUiNode?.Speed * 1e+3), Readout = ReadoutLabel, SquadronsUI = squadronsUINode?.AsSquadronsUI(), }; }