Ejemplo n.º 1
0
		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");
		}
Ejemplo n.º 2
0
        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(),
            };
        }