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(),
            };
        }
예제 #2
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");
		}