示例#1
0
        static public KeyValuePair <Int64, string>?AusGbsAstIconMitTextIconIdentUndText(
            UINodeInfoInTree gbsAst)
        {
            if (null == gbsAst)
            {
                return(null);
            }

            var iconAst =
                gbsAst?.FirstMatchingNodeFromSubtreeBreadthFirst(AuswertGbs.Glob.GbsAstTypeIstEveIcon, 2, 1);

            var textAst =
                gbsAst?.FirstMatchingNodeFromSubtreeBreadthFirst(AuswertGbs.Glob.GbsAstTypeIstEveLabel, 2, 1);

            var iconIdentNulbar = iconAst?.PyObjAddress;

            if (!iconIdentNulbar.HasValue)
            {
                return(null);
            }

            var text = textAst?.LabelText();

            return(new KeyValuePair <Int64, string>(iconIdentNulbar.Value, text));
        }
        public void Berecne()
        {
            var uiElementBase = EWarElementAst?.AsUIElementIfVisible();

            if (uiElementBase == null)
            {
                return;
            }

            EWarButtonAst = EWarElementAst;

            IconAst =
                EWarElementAst?.FirstMatchingNodeFromSubtreeBreadthFirst(kandidaat =>
                                                                         (string.Equals("Icon", kandidaat.PyObjTypName, StringComparison.InvariantCultureIgnoreCase) ||
                                                                          string.Equals("EveIcon", kandidaat.PyObjTypName, StringComparison.InvariantCultureIgnoreCase)),
                                                                         3, 1);

            if (!(IconAst?.VisibleIncludingInheritance ?? false))
            {
                return;                 //	Annaame diise EWar Anzaige isc nit aktiiv.
            }
            var EWarTypeString = EWarElementAst?.Name;

            this.Ergeebnis = new ShipUiEWarElement(uiElementBase)
            {
                EWarType    = EWarTypeString,
                IconTexture = IconAst?.TextureIdent0?.AsObjectIdInMemory(),
            };
        }
        static public IOverviewEntry OverviewEntryKonstrukt(
            UINodeInfoInTree EntryAst,
            IColumnHeader[] ListeScrollHeader,
            RectInt?regionConstraint)
        {
            if (!(EntryAst?.VisibleIncludingInheritance ?? false))
            {
                return(null);
            }

            var ListEntryAuswert = new SictAuswertGbsListEntry(EntryAst, ListeScrollHeader, regionConstraint, ListEntryTrenungZeleTypEnum.Ast);

            ListEntryAuswert.Berecne();

            var ListEntry = ListEntryAuswert.ErgeebnisListEntry;

            if (null == ListEntry)
            {
                return(null);
            }

            var MainIconAst =
                EntryAst?.FirstMatchingNodeFromSubtreeBreadthFirst(c => c?.PyObjTypNameMatchesRegexPatternIgnoreCase(MainIconPyTypeName) ?? false);

            var RightIconContainer =
                EntryAst?.FirstMatchingNodeFromSubtreeBreadthFirst(k =>
                                                                   k.PyObjTypNameIsContainer() &&
                                                                   //	2015.09.01:	Name = "rightAlignedIconContainer"
                                                                   Regex.Match(k?.Name ?? "", "right.*icon", RegexOptions.IgnoreCase).Success);

            var RightIcon =
                RightIconContainer?.MatchingNodesFromSubtreeBreadthFirst(AuswertGbs.Glob.PyObjTypNameIsIcon)
                ?.Select(AuswertGbs.Extension.AlsSprite)
                ?.WhereNotDefault()
                ?.OrdnungLabel()
                ?.ToArray();

            var MainIconSetIndicatorName =
                MainIconAst?.DictListKeyStringValueNotEmpty?.Where(key => key.RegexMatchSuccessIgnoreCase(MainIconIndicatorKeyRegexPattern))
                ?.ToArrayIfNotEmpty();

            return(new OverviewEntry(ListEntry)
            {
                MainIconSetIndicatorName = MainIconSetIndicatorName,
                RightIcon = RightIcon,
            });
        }
示例#4
0
        /// <summary>
        /// Diis werd verwand mit LayerUtilmenu, daher prüüfung Sictbarkait nit ausraicend.
        /// </summary>
        /// <param name="GbsAst"></param>
        /// <returns></returns>
        static public IContainer AlsUtilmenu(this UINodeInfoInTree GbsAst)
        {
            //	2015.09.08:	PyObjTypName	= "ExpandedUtilMenu"

            var AstExpanded =
                GbsAst?.FirstMatchingNodeFromSubtreeBreadthFirst(k => k.PyObjTypNameMatchesRegexPatternIgnoreCase("ExpandedUtilMenu"));

            return(AstExpanded?.AlsContainer());
        }
示例#5
0
 static public UINodeInfoInTree FirstNodeWithPyObjAddressFromSubtreeBreadthFirst(
     this UINodeInfoInTree node,
     Int64?pyObjAddress,
     int?depthBoundMax = null,
     int?depthBoundMin = null) =>
 node.FirstMatchingNodeFromSubtreeBreadthFirst(
     kandidaat => kandidaat.PyObjAddress == pyObjAddress,
     depthBoundMax,
     depthBoundMin);
示例#6
0
        static public MenuEntry ReadMenuEntry(
            UINodeInfoInTree entryNode,
            RectInt regionConstraint)
        {
            if (!(entryNode?.VisibleIncludingInheritance ?? false))
            {
                return(null);
            }

            var fillAst =
                entryNode.FirstMatchingNodeFromSubtreeBreadthFirst(kandidaat => string.Equals("Fill", kandidaat.PyObjTypName, StringComparison.InvariantCultureIgnoreCase), 2, 1) ??
                entryNode.FirstMatchingNodeFromSubtreeBreadthFirst(kandidaat => Regex.Match(kandidaat.PyObjTypName ?? "", "Underlay", RegexOptions.IgnoreCase).Success, 2, 1);

            var fillColor = fillAst == null ? null : ColorORGB.VonVal(fillAst.Color);

            var entryHighlight =
                null != fillColor ? (200 < fillColor.OMilli) : (bool?)null;

            return(entryNode.MenuEntry(regionConstraint, entryHighlight));
        }
示例#7
0
        static public WindowAgentPane PaneAuswert(UINodeInfoInTree paneAst)
        {
            if (!(paneAst?.VisibleIncludingInheritance ?? false))
            {
                return(null);
            }

            var EditAst = paneAst?.FirstMatchingNodeFromSubtreeBreadthFirst(k => k?.PyObjTypNameEqualsIgnoreCase("Edit") ?? false);

            return
                (new WindowAgentPane(paneAst?.AsUIElementIfVisible())
            {
                Html = EditAst?.SrHtmlstr,
            });
        }
示例#8
0
        public void Berecne(int?sessionDurationRemaining)
        {
            if (null == GbsBaumWurzel)
            {
                return;
            }

            AstSidePanels =
                Optimat.EveOnline.AuswertGbs.Extension.FirstMatchingNodeFromSubtreeBreadthFirst(
                    GbsBaumWurzel,
                    (Kandidaat) => string.Equals("SidePanels", Kandidaat.PyObjTypName, StringComparison.InvariantCultureIgnoreCase));

            LayerShipUiAst =
                Optimat.EveOnline.AuswertGbs.Extension.FirstMatchingNodeFromSubtreeBreadthFirst(
                    GbsBaumWurzel,
                    (Kandidaat) => string.Equals("ShipUI", Kandidaat.PyObjTypName, StringComparison.InvariantCultureIgnoreCase),
                    5, 1);

            var FensterLayerTarget =
                Optimat.EveOnline.AuswertGbs.Extension
                .FirstMatchingNodeFromSubtreeBreadthFirst(GbsBaumWurzel, (Kandidaat) => string.Equals("l_target", Kandidaat.Name, StringComparison.InvariantCultureIgnoreCase));

            var WindowOverviewAst =
                Optimat.EveOnline.AuswertGbs.Extension
                .FirstMatchingNodeFromSubtreeBreadthFirst(GbsBaumWurzel, (Kandidaat) => string.Equals("OverView", Kandidaat.PyObjTypName, StringComparison.InvariantCultureIgnoreCase));

            AstLayerMenu =
                Optimat.EveOnline.AuswertGbs.Extension.FirstMatchingNodeFromSubtreeBreadthFirst(
                    GbsBaumWurzel, (Kandidaat) =>
                    string.Equals("LayerCore", Kandidaat.PyObjTypName, StringComparison.InvariantCultureIgnoreCase) &&
                    string.Equals("l_menu", Kandidaat.Name, StringComparison.InvariantCultureIgnoreCase),
                    2, 1);

            AstLayerMain =
                Optimat.EveOnline.AuswertGbs.Extension.FirstMatchingNodeFromSubtreeBreadthFirst(
                    GbsBaumWurzel, (Kandidaat) =>
                    string.Equals("LayerCore", Kandidaat.PyObjTypName, StringComparison.InvariantCultureIgnoreCase) &&
                    string.Equals("l_main", Kandidaat.Name, StringComparison.InvariantCultureIgnoreCase),
                    2, 1);

            AstLayerModal =
                Optimat.EveOnline.AuswertGbs.Extension.FirstMatchingNodeFromSubtreeBreadthFirst(
                    GbsBaumWurzel, (Kandidaat) =>
                    string.Equals("LayerCore", Kandidaat.PyObjTypName, StringComparison.InvariantCultureIgnoreCase) &&
                    string.Equals("l_modal", Kandidaat.Name, StringComparison.InvariantCultureIgnoreCase),
                    2, 1);

            LayerSystemmenuAst =
                Optimat.EveOnline.AuswertGbs.Extension.FirstMatchingNodeFromSubtreeBreadthFirst(
                    GbsBaumWurzel, (Kandidaat) =>
                    string.Equals("SystemMenu", Kandidaat.PyObjTypName, StringComparison.InvariantCultureIgnoreCase) &&
                    string.Equals("l_systemmenu", Kandidaat.Name, StringComparison.InvariantCultureIgnoreCase),
                    2, 1);

            LayerSystemmenuSysmenuAst =
                Optimat.EveOnline.AuswertGbs.Extension.FirstMatchingNodeFromSubtreeBreadthFirst(
                    LayerSystemmenuAst, (Kandidaat) =>
                    Kandidaat.PyObjTypNameIsContainer() &&
                    string.Equals("sysmenu", Kandidaat.Name, StringComparison.InvariantCultureIgnoreCase),
                    2, 1);

            LayerLoginAst =
                Optimat.EveOnline.AuswertGbs.Extension.FirstMatchingNodeFromSubtreeBreadthFirst(
                    GbsBaumWurzel, (Kandidaat) =>
                    string.Equals("Login", Kandidaat.PyObjTypName, StringComparison.InvariantCultureIgnoreCase) &&
                    string.Equals("l_login", Kandidaat.Name, StringComparison.InvariantCultureIgnoreCase),
                    3, 1);

            var InflightLayer =
                GbsBaumWurzel?.FirstMatchingNodeFromSubtreeBreadthFirst(c =>
                                                                        (c?.PyObjTypName?.RegexMatchSuccessIgnoreCase("Layer") ?? false) &&
                                                                        (c?.Name?.RegexMatchSuccessIgnoreCase("inflight") ?? false));

            var InflightBracketLayer =
                InflightLayer?.FirstMatchingNodeFromSubtreeBreadthFirst(c =>
                                                                        (c?.PyObjTypName?.RegexMatchSuccessIgnoreCase("Layer") ?? false) &&
                                                                        (c?.Name?.RegexMatchSuccessIgnoreCase("bracket") ?? false));

            var setInflightBracket =
                InflightBracketLayer
                ?.MatchingNodesFromSubtreeBreadthFirst(c => c?.PyObjTypName?.RegexMatchSuccessIgnoreCase("InSpaceBracket") ?? false, null, null, null, true)
                ?.Select(bracketNode => bracketNode?.AsInSpaceBracket())
                ?.ToArrayIfNotEmpty();

            var LayerSystemmenuAstMengeKandidaatLabelVersionAst =
                Optimat.EveOnline.AuswertGbs.Extension.MatchingNodesFromSubtreeBreadthFirst(
                    LayerSystemmenuAst, (Kandidaat) =>
                    Optimat.EveOnline.AuswertGbs.Glob.GbsAstTypeIstLabel(Kandidaat), null, 3, 1)
                .ConcatNullable(
                    Optimat.EveOnline.AuswertGbs.Extension.MatchingNodesFromSubtreeBreadthFirst(
                        LayerLoginAst, (Kandidaat) =>
                        Optimat.EveOnline.AuswertGbs.Glob.GbsAstTypeIstLabel(Kandidaat), null, 3, 1))
                ?.ToArray();

            if (null != LayerSystemmenuAst)
            {
                SystemmenuAuswert = new SictAuswertGbsSystemMenu(LayerSystemmenuAst);

                SystemmenuAuswert.Berecne();
            }

            if (null != LayerSystemmenuAstMengeKandidaatLabelVersionAst)
            {
                foreach (var KandidaatLabelVersionAst in LayerSystemmenuAstMengeKandidaatLabelVersionAst)
                {
                    var Text = KandidaatLabelVersionAst.LabelText();

                    if (null == Text)
                    {
                        continue;
                    }

                    var Match = Regex.Match(Text ?? "", VersionLabelRegexPattern, RegexOptions.IgnoreCase);

                    if (!Match.Success)
                    {
                        continue;
                    }

                    VersionString = Match.Groups[1].Value;
                    break;
                }
            }

            AstLayerModalMengeKandidaatWindow =
                Optimat.EveOnline.AuswertGbs.Extension.MatchingNodesFromSubtreeBreadthFirst(
                    AstLayerModal, (Kandidaat) =>
                    Regex.Match(Kandidaat.PyObjTypName ?? "", "MessageBox", RegexOptions.IgnoreCase).Success ||
                    Regex.Match(Kandidaat.PyObjTypName ?? "", "HybridWindow", RegexOptions.IgnoreCase).Success ||
                    Regex.Match(Kandidaat.PyObjTypName ?? "", "PopupWnd", RegexOptions.IgnoreCase).Success,
                    null, 3, 1);

            LayerHintAst =
                Optimat.EveOnline.AuswertGbs.Extension.FirstMatchingNodeFromSubtreeBreadthFirst(
                    GbsBaumWurzel, (Kandidaat) =>
                    string.Equals("LayerCore", Kandidaat.PyObjTypName, StringComparison.InvariantCultureIgnoreCase) &&
                    string.Equals("l_hint", Kandidaat.Name, StringComparison.InvariantCultureIgnoreCase),
                    2, 1);

            var SetTooltipNode =
                GbsBaumWurzel.MatchingNodesFromSubtreeBreadthFirst(k => k?.PyObjTypNameMatchesRegexPattern("TooltipGeneric|TooltipPanel") ?? false);

            var SetTooltip =
                SetTooltipNode?.Select(TooltipNode => TooltipNode?.AlsContainer())?.WhereNotDefault()?.ToArrayIfNotEmpty();

            ModuleButtonHintAst =
                Optimat.EveOnline.AuswertGbs.Extension.FirstMatchingNodeFromSubtreeBreadthFirst(
                    GbsBaumWurzel, (Kandidaat) =>
                    string.Equals("ModuleButtonTooltip", Kandidaat.PyObjTypName, StringComparison.InvariantCultureIgnoreCase) &&
                    (true == Kandidaat.VisibleIncludingInheritance),
                    2, 1);

            AstLayerUtilmenu =
                Optimat.EveOnline.AuswertGbs.Extension.FirstMatchingNodeFromSubtreeBreadthFirst(
                    GbsBaumWurzel, (Kandidaat) =>
                    string.Equals("LayerCore", Kandidaat.PyObjTypName, StringComparison.InvariantCultureIgnoreCase) &&
                    string.Equals("l_utilmenu", Kandidaat.Name, StringComparison.InvariantCultureIgnoreCase),
                    2, 1);

            AstLayerAbovemain =
                Optimat.EveOnline.AuswertGbs.Extension.FirstMatchingNodeFromSubtreeBreadthFirst(
                    GbsBaumWurzel, (Kandidaat) =>
                    string.Equals("LayerCore", Kandidaat.PyObjTypName, StringComparison.InvariantCultureIgnoreCase) &&
                    string.Equals("l_abovemain", Kandidaat.Name, StringComparison.InvariantCultureIgnoreCase),
                    2, 1);

            MengeKandidaatAbovemainMessageAst =
                Optimat.EveOnline.AuswertGbs.Extension.MatchingNodesFromSubtreeBreadthFirst(
                    AstLayerAbovemain, (Kandidaat) =>
                    string.Equals("Message", Kandidaat.PyObjTypName, StringComparison.InvariantCultureIgnoreCase), null, 3, 1);

            MengeKandidaatAbovemainPanelEveMenuAst =
                Optimat.EveOnline.AuswertGbs.Extension.MatchingNodesFromSubtreeBreadthFirst(
                    AstLayerAbovemain, (Kandidaat) =>
                    string.Equals("PanelEveMenu", Kandidaat.PyObjTypName, StringComparison.InvariantCultureIgnoreCase), null, 3, 1);

            MengeKandidaatAbovemainPanelGroupAst =
                Optimat.EveOnline.AuswertGbs.Extension.MatchingNodesFromSubtreeBreadthFirst(
                    AstLayerAbovemain, (Kandidaat) =>
                    string.Equals("PanelGroup", Kandidaat.PyObjTypName, StringComparison.InvariantCultureIgnoreCase), null, 3, 1);

            LayerMainMengeKandidaatWindowAst =
                Optimat.EveOnline.AuswertGbs.Extension.MatchingNodesFromSubtreeBreadthFirst(
                    AstLayerMain, (Kandidaat) => true == Kandidaat.VisibleIncludingInheritance &&
                    (null != Kandidaat.Caption || null != Kandidaat.WindowID),
                    null,
                    2,
                    1,
                    true);

            MengeKandidaatWindowAst =
                Bib3.Glob.ListeEnumerableAgregiirt(
                    new UINodeInfoInTree[][] {
                LayerMainMengeKandidaatWindowAst,
                AstLayerModalMengeKandidaatWindow,
            })
                ?.WhereNotDefault()
                ?.ToArray();

            MengeWindow =
                MengeKandidaatWindowAst
                ?.Select((WindowAst) => Optimat.EveOnline.AuswertGbs.Glob.WindowBerecneScpezTypFürGbsAst(WindowAst))
                ?.WhereNotDefault()
                ?.ToArray();

            MengeKandidaatMenuAst =
                Optimat.EveOnline.AuswertGbs.Extension.MatchingNodesFromSubtreeBreadthFirst(
                    AstLayerMenu, (Kandidaat) =>
                    Regex.Match(Kandidaat.PyObjTypName ?? "", "DropDownMenu", RegexOptions.IgnoreCase).Success,
                    null, 2, 1);

            if (null != ModuleButtonHintAst)
            {
                ModuleButtonTooltipAuswert = new SictAuswertGbsModuleButtonTooltip(ModuleButtonHintAst);
                ModuleButtonTooltipAuswert.Berecne();
            }

            if (null != MengeKandidaatAbovemainPanelEveMenuAst)
            {
                MengeKandidaatAbovemainPanelEveMenuAuswert =
                    MengeKandidaatAbovemainPanelEveMenuAst
                    .Select((GbsAst) =>
                {
                    var Auswert = new SictAuswertGbsPanelEveMenu(GbsAst);
                    Auswert.Berecne();
                    return(Auswert);
                }).ToArray();
            }

            if (null != MengeKandidaatAbovemainPanelGroupAst)
            {
                MengeKandidaatAbovemainPanelGroupAuswert =
                    MengeKandidaatAbovemainPanelGroupAst
                    .Select((GbsAst) =>
                {
                    var Auswert = new SictAuswertGbsPanelGroup(GbsAst);
                    Auswert.Berecne();
                    return(Auswert);
                }).ToArray();
            }

            var MengeKandidaatUtilmenu =
                (null == AstLayerUtilmenu) ? null :
                Optimat.EveOnline.AuswertGbs.Extension.MatchingNodesFromSubtreeBreadthFirst(
                    GbsBaumWurzel, (Kandidaat) =>
                    (true == Kandidaat.VisibleIncludingInheritance) &&
                    string.Equals("UtilMenu", Kandidaat.PyObjTypName, StringComparison.InvariantCultureIgnoreCase), null, null, 1);

            Utilmenu = new[] { AstLayerUtilmenu.AlsUtilmenu() }.WhereNotDefault()?.ToArrayIfNotEmpty();

            AuswertSidePanels = new SictAuswertGbsSidePanels(AstSidePanels);
            AuswertSidePanels.Berecne();

            LayerShipUiAstAuswert = new SictAuswertGbsShipUi(LayerShipUiAst);
            LayerShipUiAstAuswert.Berecne();

            AuswertLayerTarget = new SictAuswertGbsLayerTarget(FensterLayerTarget);
            AuswertLayerTarget.Berecne();

            var AuswertSidePanelsAuswertPanelCurrentSystem = AuswertSidePanels.AuswertPanelCurrentSystem;
            var AuswertSidePanelsAuswertPanelRoute         = AuswertSidePanels.AuswertPanelRoute;
            var AuswertSidePanelsAstInfoPanelMissions      = AuswertSidePanels.AuswertPanelMissions;

            var Ergeebnis = new MemoryMeasurement
            {
                SessionDurationRemaining = sessionDurationRemaining,
            };

            Ergeebnis.UserDefaultLocaleName = BotEngine.WinApi.Kernel32.GetUserDefaultLocaleName();

            if (null != SystemmenuAuswert)
            {
                Ergeebnis.SystemMenu = SystemmenuAuswert.Ergeebnis;
            }

            var AstLayerMainGrööse = AstLayerMain?.Grööse;

            if (AstLayerMainGrööse.HasValue)
            {
                Ergeebnis.ScreenSize = new Bib3.Geometrik.Vektor2DInt((int)AstLayerMainGrööse.Value.A, (int)AstLayerMainGrööse.Value.B);
            }

            if (null != ModuleButtonTooltipAuswert)
            {
                Ergeebnis.ModuleButtonTooltip = ModuleButtonTooltipAuswert.Ergeebnis;
            }

            Ergeebnis.Menu =
                MengeKandidaatMenuAst?.Select(SictAuswertGbsMenu.ReadMenu)?.WhereNotDefault()?.ToArrayIfNotEmpty();

            Ergeebnis.AbovemainMessage =
                MengeKandidaatAbovemainMessageAst
                ?.Select((GbsAst) => GbsAst?.LargestLabelInSubtree()?.AsUIElementTextIfTextNotEmpty())
                ?.Where(Label => 0 < Label?.Text?.Length)
                ?.ToArrayIfNotEmpty();

            if (null != MengeKandidaatAbovemainPanelEveMenuAuswert)
            {
                Ergeebnis.AbovemainPanelEveMenu =
                    MengeKandidaatAbovemainPanelEveMenuAuswert
                    .Select((Kandidaat) => Kandidaat.Ergeebnis)
                    .Where((Kandidaat) => null != Kandidaat)
                    ?.ToArrayIfNotEmpty();
            }

            if (null != MengeKandidaatAbovemainPanelGroupAuswert)
            {
                Ergeebnis.AbovemainPanelGroup =
                    MengeKandidaatAbovemainPanelGroupAuswert
                    .Select((Kandidaat) => Kandidaat.Ergeebnis)
                    .Where((Kandidaat) => null != Kandidaat)
                    ?.ToArrayIfNotEmpty();
            }

            IWindowStation  WindowStationLobby = null;
            IWindowOverview WindowOverview     = null;

            IWindowInventory[] MengeWindowInventory = null;

            if (null != MengeWindow)
            {
                var MengeWindowStack =
                    MengeWindow
                    .OfType <WindowStack>()
                    .ToArray();

                var MengeWindowStackWindow =
                    MengeWindowStack
                    .Select((WindowStack) => WindowStack.TabSelectedWindow)
                    .Where((Window) => null != Window)
                    .ToArray();

                var MengeWindowMitAusWindowStackWindow =
                    MengeWindow
                    .ConcatNullable(MengeWindowStackWindow)
                    ?.ToArrayIfNotEmpty();

                var MengeWindowOverView =
                    MengeWindowMitAusWindowStackWindow?.OfType <IWindowOverview>().ToArrayIfNotEmpty();

                var MengeWindowChatChannel =
                    MengeWindowMitAusWindowStackWindow?.OfType <WindowChatChannel>().ToArrayIfNotEmpty();

                var MengeWindowSelectedItemView =
                    MengeWindowMitAusWindowStackWindow?.OfType <IWindowSelectedItemView>().ToArrayIfNotEmpty();

                var MengeWindowPeopleAndPlaces =
                    MengeWindowMitAusWindowStackWindow?.OfType <WindowPeopleAndPlaces>().ToArrayIfNotEmpty();

                var MengeWindowDroneView =
                    MengeWindowMitAusWindowStackWindow?.OfType <IWindowDroneView>().ToArrayIfNotEmpty();

                var MengeWindowFittingWindow =
                    MengeWindowMitAusWindowStackWindow?.OfType <WindowShipFitting>().ToArrayIfNotEmpty();

                var MengeWindowFittingMgmt =
                    MengeWindowMitAusWindowStackWindow?.OfType <WindowFittingMgmt>().ToArrayIfNotEmpty();

                var MengeWindowStationLobby =
                    MengeWindowMitAusWindowStackWindow?.OfType <IWindowStation>().ToArrayIfNotEmpty();

                var MengeWindowSurveyScanView =
                    MengeWindowMitAusWindowStackWindow?.OfType <IWindowSurveyScanView>().ToArrayIfNotEmpty();

                MengeWindowInventory =
                    MengeWindowMitAusWindowStackWindow?.OfType <IWindowInventory>().ToArrayIfNotEmpty();

                var MengeWindowAgentDialogue =
                    MengeWindowMitAusWindowStackWindow?.OfType <WindowAgentDialogue>().ToArrayIfNotEmpty();

                var MengeWindowAgentBrowser =
                    MengeWindowMitAusWindowStackWindow?.OfType <WindowAgentBrowser>().ToArrayIfNotEmpty();

                var MengeWindowTelecom =
                    MengeWindowMitAusWindowStackWindow?.OfType <WindowTelecom>().ToArrayIfNotEmpty();

                var MengeWindowRegionalMarket =
                    MengeWindowMitAusWindowStackWindow?.OfType <WindowRegionalMarket>().ToArrayIfNotEmpty();

                var MengeWindowMarketAction =
                    MengeWindowMitAusWindowStackWindow?.OfType <WindowMarketAction>().ToArrayIfNotEmpty();

                var MengeWindowItemSell =
                    MengeWindowMitAusWindowStackWindow?.OfType <WindowItemSell>().ToArrayIfNotEmpty();

                Ergeebnis.WindowStack = MengeWindowStack.ToArrayIfNotEmpty();

                WindowOverview     = MengeWindowOverView?.FirstOrDefault();
                WindowStationLobby = MengeWindowStationLobby?.FirstOrDefault();

                Ergeebnis.WindowOverview         = MengeWindowOverView.ToArrayIfNotEmpty();
                Ergeebnis.WindowChatChannel      = MengeWindowChatChannel.ToArrayIfNotEmpty();
                Ergeebnis.WindowSelectedItemView = MengeWindowSelectedItemView.ToArrayIfNotEmpty();
                Ergeebnis.WindowPeopleAndPlaces  = MengeWindowPeopleAndPlaces.ToArrayIfNotEmpty();
                Ergeebnis.WindowDroneView        = MengeWindowDroneView.ToArrayIfNotEmpty();
                Ergeebnis.WindowShipFitting      = MengeWindowFittingWindow.ToArrayIfNotEmpty();
                Ergeebnis.WindowFittingMgmt      = MengeWindowFittingMgmt.ToArrayIfNotEmpty();
                Ergeebnis.WindowStation          = MengeWindowStationLobby.ToArrayIfNotEmpty();
                Ergeebnis.WindowSurveyScanView   = MengeWindowSurveyScanView.ToArrayIfNotEmpty();

                Ergeebnis.WindowInventory     = MengeWindowInventory;
                Ergeebnis.WindowAgentDialogue = MengeWindowAgentDialogue;
                Ergeebnis.WindowAgentBrowser  = MengeWindowAgentBrowser;

                Ergeebnis.WindowTelecom = MengeWindowTelecom;

                Ergeebnis.WindowRegionalMarket = MengeWindowRegionalMarket;
                Ergeebnis.WindowMarketAction   = MengeWindowMarketAction;
                Ergeebnis.WindowItemSell       = MengeWindowItemSell;

                Ergeebnis.WindowProbeScanner = MengeWindowMitAusWindowStackWindow?.OfType <IWindowProbeScanner>().ToArrayIfNotEmpty();

                var MengeWindowSonstige =
                    MengeWindow
                    .Except(
                        new IEnumerable <IWindow>[] {
                    MengeWindowStack,
                    MengeWindowOverView,
                    MengeWindowChatChannel,
                    MengeWindowPeopleAndPlaces,
                    MengeWindowSelectedItemView,
                    MengeWindowSurveyScanView,
                    MengeWindowDroneView,
                    MengeWindowFittingWindow,
                    MengeWindowFittingMgmt,
                    MengeWindowStationLobby,
                    MengeWindowInventory,
                    MengeWindowAgentDialogue,
                    MengeWindowAgentBrowser,
                    MengeWindowTelecom,
                    MengeWindowRegionalMarket,
                    MengeWindowMarketAction,
                    MengeWindowItemSell,
                    Ergeebnis.WindowProbeScanner,
                }.ConcatNullable())
                    .ToArrayIfNotEmpty();

                Ergeebnis.WindowOther = MengeWindowSonstige;
            }

            Ergeebnis.VersionString = VersionString;

            Ergeebnis.Neocom = AuswertSidePanels?.Neocom;

            Ergeebnis.InfoPanelCurrentSystem = AuswertSidePanelsAuswertPanelCurrentSystem?.ErgeebnisScpez;
            Ergeebnis.InfoPanelRoute         = AuswertSidePanelsAuswertPanelRoute?.ErgeebnisScpez;
            Ergeebnis.InfoPanelMissions      = AuswertSidePanelsAstInfoPanelMissions?.ErgeebnisScpez;

            var InfoPanelButtonCurrentSystem = AuswertSidePanels.InfoPanelButtonLocationInfoAst.AsUIElementIfVisible();
            var InfoPanelButtonRoute         = AuswertSidePanels.InfoPanelButtonRouteAst.AsUIElementIfVisible();
            var InfoPanelButtonMissions      = AuswertSidePanels.InfoPanelButtonMissionAst.AsUIElementIfVisible();

            Ergeebnis.InfoPanelButtonCurrentSystem = InfoPanelButtonCurrentSystem;
            Ergeebnis.InfoPanelButtonRoute         = InfoPanelButtonRoute;
            Ergeebnis.InfoPanelButtonMissions      = InfoPanelButtonMissions;
            Ergeebnis.InfoPanelButtonIncursions    = AuswertSidePanels?.InfoPanelButtonIncursionsAst?.AsUIElementIfVisible();

            Ergeebnis.Utilmenu = Utilmenu;

            Ergeebnis.ShipUi = LayerShipUiAstAuswert.Ergeebnis;
            Ergeebnis.Target = AuswertLayerTarget?.SetTarget?.ToArrayIfNotEmpty();

            Ergeebnis.Tooltip = SetTooltip;

            Ergeebnis.InflightBracket = setInflightBracket;

            this.AuswertErgeebnis = Ergeebnis;
        }
示例#9
0
        public void Berecne()
        {
            if (!(slotNode?.VisibleIncludingInheritance ?? false))
            {
                return;
            }

            ModuleButtonAst =
                slotNode?.FirstMatchingNodeFromSubtreeBreadthFirst(kandidaat => string.Equals(ModuleButtonPyTypeName, kandidaat.PyObjTypName, StringComparison.InvariantCultureIgnoreCase), 1, 1);

            ModuleButtonIconAst =
                ModuleButtonAst?.FirstMatchingNodeFromSubtreeBreadthFirst((kandidaat) =>
                                                                          (string.Equals("Icon", kandidaat.PyObjTypName, StringComparison.InvariantCultureIgnoreCase) ||
                                                                           string.Equals("EveIcon", kandidaat.PyObjTypName, StringComparison.InvariantCultureIgnoreCase)),
                                                                          1, 1);

            ModuleButtonQuantityAst =
                ModuleButtonAst?.FirstMatchingNodeFromSubtreeBreadthFirst((kandidaat) => string.Equals("quantityParent", kandidaat.Name, StringComparison.InvariantCultureIgnoreCase), 1, 1);

            ModuleButtonQuantityLabelAst =
                ModuleButtonQuantityAst?.FirstMatchingNodeFromSubtreeBreadthFirst((kandidaat) => string.Equals("Label", kandidaat.PyObjTypName, StringComparison.InvariantCultureIgnoreCase), 1, 1);

            var MengeSpriteAst =
                slotNode?.MatchingNodesFromSubtreeBreadthFirst((kandidaat) =>
                                                               true == kandidaat.VisibleIncludingInheritance &&
                                                               string.Equals("Sprite", kandidaat.PyObjTypName, StringComparison.InvariantCultureIgnoreCase), null, 1, 1);

            SpriteHiliteAst =
                (null == MengeSpriteAst) ? null :
                MengeSpriteAst.FirstOrDefault((kandidaat) => string.Equals("hilite", kandidaat.Name, StringComparison.InvariantCultureIgnoreCase));

            SpriteGlowAst =
                (null == MengeSpriteAst) ? null :
                MengeSpriteAst.FirstOrDefault((kandidaat) => string.Equals("glow", kandidaat.Name, StringComparison.InvariantCultureIgnoreCase));

            SpriteBusyAst =
                (null == MengeSpriteAst) ? null :
                MengeSpriteAst.FirstOrDefault((kandidaat) => string.Equals("busy", kandidaat.Name, StringComparison.InvariantCultureIgnoreCase));

            MengeKandidaatRampAst =
                slotNode?.MatchingNodesFromSubtreeBreadthFirst((kandidaat) =>
                                                               true == kandidaat.VisibleIncludingInheritance &&
                                                               Regex.Match(kandidaat.PyObjTypName ?? "", "ramps", RegexOptions.IgnoreCase).Success, 1, 1);

            MengeKandidaatRampAuswert =
                MengeKandidaatRampAst?.Select((kandidaatRampAst) =>
            {
                var Auswert = new SictAuswertGbsShipModuleButtonRamps(kandidaatRampAst);
                Auswert.Berecne();
                return(Auswert);
            }).ToArray();

            var RampAuswert =
                MengeKandidaatRampAuswert
                ?.FirstOrDefault((kandidaat) => null != kandidaat.LeftRampAst || kandidaat.RampAktiiv);

            AstMainShape =
                slotNode?.FirstMatchingNodeFromSubtreeBreadthFirst((kandidaat) => string.Equals("mainshape", kandidaat.Name, StringComparison.InvariantCultureIgnoreCase), 1, 1);

            if (null == AstMainShape)
            {
                return;
            }

            bool?SpriteHiliteSictbar = null;

            bool?SpriteGlowSictbar = null;
            bool?SpriteBusySictbar = null;

            if (null != SpriteHiliteAst)
            {
                SpriteHiliteSictbar = true == SpriteHiliteAst.VisibleIncludingInheritance;
            }

            if (null != SpriteGlowAst)
            {
                SpriteGlowSictbar = true == SpriteGlowAst.VisibleIncludingInheritance;
            }

            if (null != SpriteBusyAst)
            {
                SpriteBusySictbar = true == SpriteBusyAst.VisibleIncludingInheritance;
            }

            var ModuleButtonSictbar = ModuleButtonAst?.VisibleIncludingInheritance;

            var ModuleButtonFlächeToggle =
                ModuleButtonAst.AsUIElementIfVisible().WithRegionSizePivotAtCenter(new Vektor2DInt(16, 16));

            var ModuleButtonIconTextureIdent = ModuleButtonIconAst?.TextureIdent0;

            var rampActive        = ModuleButtonAst?.RampActive ?? RampAuswert?.RampAktiiv ?? false;
            var rampRotationMilli = RampAuswert?.RotatioonMili;

            bool?overloadOn = null;

            var overloadButton =
                slotNode?.FirstMatchingNodeFromSubtreeBreadthFirst(node => node.PyObjTypNameIsSprite() && (node?.Name?.RegexMatchSuccessIgnoreCase("OverloadB(tn|utton)") ?? false));

            if (null != overloadButton)
            {
                if (overloadButton?.Hint?.RegexMatchSuccessIgnoreCase(overloadOffHintRegexPattern) ?? false)
                {
                    overloadOn = false;
                }

                if (overloadButton?.Hint?.RegexMatchSuccessIgnoreCase(overloadOnHintRegexPattern) ?? false)
                {
                    overloadOn = true;
                }
            }

            var ModuleRepr = new ShipUiModule(slotNode.AsUIElementIfVisible())
            {
                ModuleButtonVisible     = ModuleButtonSictbar,
                ModuleButtonIconTexture = ModuleButtonIconTextureIdent?.AsObjectIdInMemory(),
                ModuleButtonQuantity    = ModuleButtonQuantityLabelAst?.SetText,
                RampActive        = rampActive,
                RampRotationMilli = rampRotationMilli,
                HiliteVisible     = SpriteHiliteSictbar,
                GlowVisible       = SpriteGlowSictbar,
                BusyVisible       = SpriteBusySictbar,
                OverloadOn        = overloadOn,
            };

            this.ModuleRepr = ModuleRepr;
        }
		virtual public void Berecne()
		{
			var Container = EntryAst.AlsContainer(regionConstraint: RegionConstraint);

			if (null == Container)
				return;

			LabelAst = EntryAst.LargestLabelInSubtree();

			FläceFürMenuAst = LabelAst;

			LabelGrenzeLinx = (int?)LabelAst.LaagePlusVonParentErbeLaageA();

			/*
			 * 2014.11.08
			 * 
			 * Änderung für Release "Rhea":
			 * "PyObjTypName": "GlowSprite"
			 * 
			ExpanderAst =
				EntryAst.SuuceFlacMengeAstFrüheste(
				(Kandidaat) =>
					AuswertGbs.Glob.GbsAstTypeIstEveIcon(Kandidaat) &&
					Regex.Match(Kandidaat.Name	?? "", "expander", RegexOptions.IgnoreCase).Success);
			 * */
			ExpanderAst =
					EntryAst.FirstMatchingNodeFromSubtreeBreadthFirst(
					(kandidaat) =>
						(AuswertGbs.Glob.GbsAstTypeIstEveIcon(kandidaat) ||
						AuswertGbs.Glob.GbsAstTypeIstSprite(kandidaat)) &&
						Regex.Match(kandidaat.Name ?? "", "expander", RegexOptions.IgnoreCase).Success);

			IstGroup = ((null == ExpanderAst) ? null : ExpanderAst.VisibleIncludingInheritance) ?? false;

			var MengeIconOderSpriteAst =
				EntryAst.MatchingNodesFromSubtreeBreadthFirst(
				(kandidaat) =>
					(AuswertGbs.Glob.GbsAstTypeIstEveIcon(kandidaat) ||
					Regex.Match(kandidaat.PyObjTypName ?? "", "sprite", RegexOptions.IgnoreCase).Success) &&
					(kandidaat.VisibleIncludingInheritance ?? false));

			IstItem =
				(!MengeIconOderSpriteAst.IsNullOrEmpty() || null != LabelAst) &&
				!(IstGroup ?? false);

			var MengeIconOderSpriteGrenzeLinx =
				MengeIconOderSpriteAst
				?.Select((iconAst) => iconAst.LaagePlusVonParentErbeLaageA())
				?.Where((kandidaat) => kandidaat.HasValue)
				?.Select((iconAstGrenzeLinx) => iconAstGrenzeLinx.Value)
				?.ToArray();

			if (!MengeIconOderSpriteGrenzeLinx.IsNullOrEmpty())
				InhaltGrenzeLinx = (int)Math.Min(InhaltGrenzeLinx ?? int.MaxValue, MengeIconOderSpriteGrenzeLinx.Min());

			if (LabelGrenzeLinx.HasValue)
				InhaltGrenzeLinx = (int)Math.Min(InhaltGrenzeLinx ?? int.MaxValue, LabelGrenzeLinx.Value);

			var ListEntryInZeleTrenung = this.ListEntryInZeleTrenung();

			if (ListEntryTrenungZeleTypEnum.Ast == ListEntryInZeleTrenung)
			{
				//	genuzt z.B. für "OverviewScrollEntry".
				var EntryListeZeleLabel =
					EntryAst.ExtraktMengeLabelString()?.ToArray();

				ListeZuHeaderZeleString =
					EntryListeZeleLabel
					?.Select(zeleLabel => new KeyValuePair<IColumnHeader, string>(
						HeaderBestFit(zeleLabel, ListeColumnHeader),
						zeleLabel?.Text))
					?.ToArray();
			}
			else
			{
				Label = LabelAst.AsUIElementTextIfTextNotEmpty();

				var Bescriftung = Label?.Text;

				if (null != Bescriftung)
				{
					if (!(IstGroup ?? false))
					{
						ItemListeZeleTextMitFormat = Bescriftung.Split(new string[] { "<t>" }, StringSplitOptions.None);

						var ItemListeZeleText =
							ItemListeZeleTextMitFormat
							?.Select((zeleTextMitFormat) => ZeleTextAusZeleTextMitFormat(zeleTextMitFormat))
							?.ToArray();

						ListeZuHeaderZeleString =
							ItemListeZeleText
							?.Select((zeleText, index) => new KeyValuePair<IColumnHeader, string>(
								ListeColumnHeader?.FirstOrDefault(kandidaat => kandidaat.ColumnIndex == index),
								zeleText))
							?.ToArray();
					}
				}
			}

			var backgroundColorNode =
				EntryAst?.FirstMatchingNodeFromSubtreeBreadthFirst(node =>
					(node?.PyObjTypNameMatchesRegexPatternIgnoreCase("fill") ?? false) &&
					(node?.Name?.RegexMatchSuccessIgnoreCase("bgColor") ?? false));

			var ListBackgroundColor =
				EntryAst?.BackgroundList
				?.Select(background => background.Color.AlsColorORGB())
				.ConcatNullable(new[] { backgroundColorNode?.Color.AlsColorORGB() })
				?.WhereNotDefault()
				?.ToArrayIfNotEmpty();

			var SetSprite =
				EntryAst.SetSpriteFromChildren()
				?.ToArrayIfNotEmpty();

			ErgeebnisListEntry = new ListEntry(Container)
			{
				ContentBoundLeft = InhaltGrenzeLinx,

				ListColumnCellLabel = ListeZuHeaderZeleString,

				GroupExpander = ExpanderAst?.AsUIElementIfVisible(),

				IsGroup = IstGroup,
				IsExpanded = ExpanderSpriteIsExpanded(ExpanderAst),
				IsSelected = EntryAst.isSelected,

				ListBackgroundColor = ListBackgroundColor,
				SetSprite = SetSprite,
			};
		}
示例#11
0
        virtual public void Read()
        {
            if (!(ScrollNode?.VisibleIncludingInheritance ?? false))
            {
                return;
            }

            var mainContainerNode =
                ScrollNode?.FirstMatchingNodeFromSubtreeBreadthFirst(
                    candidate => string.Equals(MainContainerUIElementName, candidate.Name, StringComparison.InvariantCultureIgnoreCase),
                    2, 0);

            var scrollHeadersContainerNode =
                ScrollNode?.FirstMatchingNodeFromSubtreeBreadthFirst(candidate =>
                                                                     candidate.PyObjTypNameIsContainer() &&
                                                                     (Regex.Match(candidate.Name ?? "", "scrollHeader", RegexOptions.IgnoreCase).Success) ||
                                                                     Regex.Match(candidate.PyObjTypName ?? "", "SortHeader", RegexOptions.IgnoreCase).Success ||
                                                                     candidate.PyObjTypNameMatchesRegexPatternIgnoreCase("ScrollColumnHeader"),
                                                                     3, 1);

            var setCandidateForColumnHeaderNode =
                scrollHeadersContainerNode?.MatchingNodesFromSubtreeBreadthFirst(candidate =>
                                                                                 Regex.Match(candidate.PyObjTypName ?? "", "ColumnHeader", RegexOptions.IgnoreCase).Success ||
                                                                                 candidate.PyObjTypNameIsContainer(),
                                                                                 null, 2, 1)
                ?.ToArray();

            var listColumnHeader =
                setCandidateForColumnHeaderNode
                ?.Select(SictAuswertGbsListColumnHeader.Read)
                ?.Where((columnHeader) => null != columnHeader)
                ?.Where((columnHeader) => !(columnHeader?.Text).IsNullOrEmpty())
                .TailmengeUnterste(ScrollNode)
                ?.OrderBy((columnHeader) => columnHeader.Region.Center().A)
                ?.GroupBy(header => header.Id)
                ?.Select(headerGroup => headerGroup.FirstOrDefault())
                ?.ToArray();

            var mainContainerScrollControlsNode =
                mainContainerNode?.FirstMatchingNodeFromSubtreeBreadthFirst(
                    candidate => string.Equals("ScrollControls", candidate.PyObjTypName, StringComparison.InvariantCultureIgnoreCase),
                    2, 1);

            var mainContainerScrollControlsScrollHandleNode =
                mainContainerScrollControlsNode?.FirstMatchingNodeFromSubtreeBreadthFirst(
                    candidate => string.Equals("ScrollHandle", candidate.PyObjTypName, StringComparison.InvariantCultureIgnoreCase),
                    3, 1);

            var mainContainerClipperNode =
                mainContainerNode?.FirstMatchingNodeFromSubtreeBreadthFirst(
                    candidate => string.Equals(ClipperUIElementName, candidate.Name, StringComparison.InvariantCultureIgnoreCase),
                    2, 1);

            ClipperContentNode =
                mainContainerClipperNode?.FirstMatchingNodeFromSubtreeBreadthFirst(
                    candidate => candidate.PyObjTypNameIsContainer() &&
                    string.Equals(ClipperContentUIElementName, candidate.Name, StringComparison.InvariantCultureIgnoreCase),
                    2, 1);

            Result = new Scroll(ScrollNode.AsUIElementIfVisible())
            {
                ColumnHeader      = listColumnHeader,
                Clipper           = mainContainerClipperNode.AsUIElementIfVisible(),
                ScrollHandleBound = mainContainerScrollControlsNode.AsUIElementIfVisible(),
                ScrollHandle      = mainContainerScrollControlsScrollHandleNode.AsUIElementIfVisible(),
            };
        }
示例#12
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(),
            };
        }