Exemple #1
0
        static public SictAufgaabeParamZerleegungErgeebnis ZerleegeLockTarget(
            ISictAutomatZuusctand AutomaatZuusctand,
            SictOverViewObjektZuusctand OverviewObjekt)
        {
            var AufgaabeParamZerleegungErgeebnis = new SictAufgaabeParamZerleegungErgeebnis(null, true);

            if (null == OverviewObjekt)
            {
                return(AufgaabeParamZerleegungErgeebnis);
            }

            if (true == OverviewObjekt.TargetingOderTargeted)
            {
                return(AufgaabeParamZerleegungErgeebnis);
            }

            AufgaabeParamZerleegungErgeebnis.ZerleegungVolsctändigSezeAus();

            if (null == AutomaatZuusctand)
            {
                return(AufgaabeParamZerleegungErgeebnis);
            }

            var FittingUndShipZuusctand = AutomaatZuusctand.FittingUndShipZuusctand;
            var OverviewUndTarget       = AutomaatZuusctand.OverviewUndTarget;

            var MengeTargetNocSictbar = (null == OverviewUndTarget) ? null : OverviewUndTarget.MengeTargetNocSictbar;

            var MengeTargetAnzaalScrankeMax = (null == FittingUndShipZuusctand) ? null : FittingUndShipZuusctand.MengeTargetAnzaalScrankeMax;
            var ScritNääxteJammed           = (null == FittingUndShipZuusctand) ? null : FittingUndShipZuusctand.ScritNääxteJammed;
            var ScritÜüberNääxteJammed      = (null == FittingUndShipZuusctand) ? null : FittingUndShipZuusctand.ScritÜüberNääxteJammed;

            if (ScritÜüberNääxteJammed ?? false)
            {
                return(AufgaabeParamZerleegungErgeebnis);
            }

            if (MengeTargetAnzaalScrankeMax.HasValue)
            {
                if (MengeTargetAnzaalScrankeMax <= MengeTargetNocSictbar.CountNullable())
                {
                    return(AufgaabeParamZerleegungErgeebnis);
                }
            }

            var MenuKaskaadeLezte = AutomaatZuusctand.GbsMenuLezteInAst(OverviewObjekt);

            var MenuAstBedingung =
                new SictAnforderungMenuKaskaadeAstBedingung(SictShipZuusctandMitFitting.MenuEntryLockTargetRegexPattern, true);

            if (null != MenuKaskaadeLezte)
            {
                var MenuKaskaadeLezteAlter = AutomaatZuusctand.NuzerZaitMili - MenuKaskaadeLezte.BeginZait;

                var Menu0ListeEntry = MenuKaskaadeLezte.AusMenu0ListeEntryBerecne();

                if (!Menu0ListeEntry.IsNullOrEmpty())
                {
                    var MenuEntryLock = MenuAstBedingung.AusMengeMenuEntryGibUntermengePasendFürFrüühestePasendePrio(Menu0ListeEntry);

                    if (null == MenuEntryLock &&
                        !(8888 < MenuKaskaadeLezteAlter))
                    {
                        //	Kain Entry "Lock" vorhande. Daher Vermuutung das Objekt zu wait entfernt für Lock.

                        AufgaabeParamZerleegungErgeebnis.FüügeAn(AufgaabeParamAndere.AufgaabeDistanceAinzusctele(OverviewObjekt, null, 4444));
                    }
                }

                if (!MenuKaskaadeLezte.EndeZait.HasValue)
                {
                    //	Menu zu OverviewObjekt isc noc geöfnet.

                    if (ScritNääxteJammed ?? false)
                    {
                        return(AufgaabeParamZerleegungErgeebnis);
                    }
                }
            }

            AufgaabeParamZerleegungErgeebnis.ZerleegungVolsctändigSezeAin();

            AufgaabeParamZerleegungErgeebnis.FüügeAn(
                AufgaabeParamAndere.AufgaabeAktioonMenu(OverviewObjekt,
                                                        MenuAstBedingung));

            return(AufgaabeParamZerleegungErgeebnis);
        }
Exemple #2
0
        public IEnumerable <SictAufgaabeParam> FürMineListeAufgaabeNääxteParamBerecneTailInBeltMine(
            ISictAutomatZuusctand AutomaatZuusctand)
        {
            if (null == AutomaatZuusctand)
            {
                return(null);
            }

            var ListeAufgaabeParam = new List <SictAufgaabeParam>();

            var AsteroidLockListeAufgaabeParam = new List <SictAufgaabeParam>();

            var AsteroidMineListeAufgaabeParam = new List <SictAufgaabeParam>();

            var AsteroidMineModuleScalteAinListeAufgaabeParam = new List <SictAufgaabeParam>();

            var FittingUndShipZuusctand = AutomaatZuusctand.FittingUndShipZuusctand;
            var OverviewUndTarget       = AutomaatZuusctand.OverviewUndTarget;

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

            var ShipMengeModule = AutomaatZuusctand.ShipMengeModule();

            var ShipMengeModuleMiner =
                ShipMengeModule
                .WhereNullable((Kandidaat) => Kandidaat.IstMiner ?? false)
                .ToArrayNullable();

            var ShipZuusctand = FittingUndShipZuusctand.ShipZuusctand;

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

            var CharZuusctandWarping = ShipZuusctand.Warping;
            var CharZuusctandDocking = ShipZuusctand.Docking;

            var ListeTargetVerwendet =
                MengeTargetVerwendet
                .OrderByNullable((Kandidaat) => Kandidaat.Key.SictungLezteDistanceScrankeMaxScpezTarget ?? int.MaxValue)
                .OrderByNullable((Kandidaat) => true == Kandidaat.Key.InputFookusTransitioonLezteZiilWert ? -1 : 0)
                .ToArrayNullable();

            var OverViewScrolledToTopLezteAlter = AutomaatZuusctand.OverViewScrolledToTopLezteAlter();
            var WindowOverviewScroll            = AutomaatZuusctand.WindowOverviewScnapscusLezteScroll();

            var MengeOverviewObjektVerwendetFraigaabe =
                MengeOverviewObjektVerwendet
                .WhereNullable((Kandidaat) => Kandidaat.Value.OreTypFraigaabe ?? false)
                .ToArrayNullable();

            ListeTargetVerwendet.ForEachNullable((Target) =>
            {
                if (!Target.Value.OreTypFraigaabe ?? false)
                {
                    ListeAufgaabeParam.Add(
                        SictAufgaabeParam.KonstruktAufgaabeParam(
                            AufgaabeParamAndere.KonstruktTargetUnLock(Target.Key),
                            "Target Ore Type not suiting Preferences"));
                }
            });

            var AsteroidKeepInRangeListeAufgaabeParam = new List <SictAufgaabeParam>();

            if ((MengeAsteroidInRaicwaiteAnzaalAusraicend ?? false) &&
                (0 < MengeTargetVerwendet.CountNullable((Kandidaat) => Kandidaat.Value.OreTyp.HasValue)))
            {
                AsteroidKeepInRangeListeAufgaabeParam.Add(new AufgaabeParamShipStop());
            }
            else
            {
                if (null != OverviewObjektFraigaabeLockedNictNääxte.Key)
                {
                    var TargetOoneAssignedWaitestEntfernte =
                        MengeTargetVerwendet
                        .WhereNullable((Kandidaat) => !(0 < Kandidaat.Key.ScnapscusMengeAssignedAnzaal()))
                        .OrderByDescendingNullable((Kandidaat) => Kandidaat.Key.SictungLezteDistanceScrankeMax() ?? int.MaxValue)
                        .FirstOrDefaultNullable();

                    if (null != TargetOoneAssignedWaitestEntfernte.Key)
                    {
                        if (OverviewObjektFraigaabeLockedNictNääxte.Key.DistanceScrankeMaxKombi < TargetOoneAssignedWaitestEntfernte.Key.SictungLezteDistanceScrankeMin() - 1111)
                        {
                            ListeAufgaabeParam.Add(AufgaabeParamAndere.KonstruktTargetUnLock(TargetOoneAssignedWaitestEntfernte.Key));
                        }
                    }
                }

                if (!(AutomaatZuusctand.OverViewScrolledToTopLezteAlter() < 13111))
                {
                    AsteroidKeepInRangeListeAufgaabeParam.Add(new AufgaabeParamScrollToTop(WindowOverviewScroll));
                }

                if (null != TargetAnzufliigeNääxte)
                {
                    AsteroidKeepInRangeListeAufgaabeParam.Add(AufgaabeParamAndere.AufgaabeDistanceAinzusctele(TargetAnzufliigeNääxte, null, 4444));
                }
            }

            ListeAufgaabeParam.AddRange(
                AsteroidKeepInRangeListeAufgaabeParam
                .Select((AufgaabeParam) => SictAufgaabeParam.KonstruktAufgaabeParam(
                            AufgaabeParam, "keep Asteroid in Range")));

            if (null == OverviewTabBevorzuugtTitel)
            {
            }
            else
            {
                //	ListeAufgaabeParam.Add(AufgaabeParamAndere.KonstruktOverviewTabAktiviire(OverviewTabBevorzuugtTitel));

                //	Laade Overview Default "Mining" naac Tab.

                ListeAufgaabeParam.Add(new AufgaabeParamOverviewPresetLaade(OverviewPresetTyp.Default, OverviewDefaultMiningIdent, OverviewTabBevorzuugtTitel));
            }

            if (null != ShipMengeModuleMiner)
            {
                foreach (var ModuleMiner in ShipMengeModuleMiner)
                {
                    var ModuleMinerTarget = ModuleMiner.TargetAktuel();

                    var ModuleMinerTargetInfo =
                        MengeTargetVerwendet
                        .FirstOrDefaultNullable((Kandidaat) => Kandidaat.Key == ModuleMinerTarget);

                    if (ModuleMiner.AktiivBerecne(1))
                    {
                        string ModuleScalteAusUrsaceSictString = null;

                        if (true == AnnaameNaacAbbrucMinerZyyklusOreHoldGefült)
                        {
                            ModuleScalteAusUrsaceSictString = "Ore Hold Full";
                        }

                        if (null != ModuleMinerTargetInfo.Key)
                        {
                            if (ModuleMinerTargetInfo.Value.ErzMengeRestScrankeMin <= 0)
                            {
                                ModuleScalteAusUrsaceSictString = "Asteroid depleted";
                            }
                        }

                        if (null != ModuleScalteAusUrsaceSictString)
                        {
                            AsteroidMineListeAufgaabeParam.Add(
                                SictAufgaabeParam.KonstruktAufgaabeParam(
                                    AufgaabeParamAndere.KonstruktModuleScalteAus(ModuleMiner),
                                    ModuleScalteAusUrsaceSictString));
                        }

                        continue;
                    }

                    if (true == DockUndOffloadPrioVorMine)
                    {
                        continue;
                    }

                    var ModuleMinerRange = (ModuleMiner.RangeMax ?? ModuleMiner.RangeOptimal);

                    if (!ModuleMinerRange.HasValue)
                    {
                        continue;
                    }

                    SictTargetZuusctand ZuModuleTargetVerwendet = null;

                    if (!(true == CharZuusctandWarping))
                    {
                        if (null != ListeTargetVerwendet)
                        {
                            foreach (var Target in ListeTargetVerwendet)
                            {
                                if (null != ZuModuleTargetVerwendet)
                                {
                                    break;
                                }

                                if (Target.Key.SictungLezteDistanceScrankeMaxScpezTarget <= TargetDistanceScrankeMax)
                                {
                                    //	Pro Scrit nur ain Module Assigne.
                                    if (AsteroidMineModuleScalteAinListeAufgaabeParam.Count < 1)
                                    {
                                        if (0 < Target.Value.MengeAssignedAnzaal)
                                        {
                                            //	zu diisem Target isc beraits mindestens ain Module Assigned.

                                            if (0 < TargetAssignmentMeerereKarenzDauerRest)
                                            {
                                                continue;
                                            }
                                        }

                                        ZuModuleTargetVerwendet = Target.Key;

                                        if (true == Target.Key.InputFookusTransitioonLezteZiilWert)
                                        {
                                            if (0 < TargetAssignmentKarenzDauerRest)
                                            {
                                            }
                                            else
                                            {
                                                AsteroidMineModuleScalteAinListeAufgaabeParam.Add(AufgaabeParamAndere.KonstruktModuleScalteAin(ModuleMiner));
                                            }
                                        }
                                        else
                                        {
                                            AsteroidMineListeAufgaabeParam.Add(AufgaabeParamAndere.KonstruktTargetInputFookusSeze(Target.Key));
                                        }
                                    }
                                }
                                else
                                {
                                }
                            }
                        }

                        if (null != ZuModuleTargetVerwendet)
                        {
                            continue;
                        }
                    }
                }
            }

            AsteroidMineListeAufgaabeParam.AddRange(AsteroidMineModuleScalteAinListeAufgaabeParam.Take(1));

            if (null != AsteroidZuLockeNääxte)
            {
                AsteroidLockListeAufgaabeParam.Add(new AufgaabeParamLockTarget(AsteroidZuLockeNääxte));
            }

            if (InOverviewSuuceAsteroid ?? false)
            {
                /*
                 * 2014.10.05
                 *
                 * if (OverViewScrolledToTopLezteAlter < 13333)
                 * {
                 *      AsteroidLockListeAufgaabeParam.Add(new AufgaabeParamScrollDown(WindowOverviewScroll));
                 * }
                 * else
                 * {
                 *      AsteroidLockListeAufgaabeParam.Add(new AufgaabeParamScrollToTop(WindowOverviewScroll));
                 * }
                 * */

                AsteroidLockListeAufgaabeParam.Add(AufgaabeParamAndere.KonstruktInOverviewTabFolgeViewportDurcGrid());
            }

            ListeAufgaabeParam.AddRange(AsteroidMineListeAufgaabeParam);
            ListeAufgaabeParam.AddRange(AsteroidLockListeAufgaabeParam);

            return(ListeAufgaabeParam);
        }
Exemple #3
0
        static public SictAufgaabeParamZerleegungErgeebnis ZerleegeDestrukt(
            ISictAutomatZuusctand AutomaatZuusctand,
            SictAufgaabeKombiZuusctand KombiZuusctand,
            SictOverViewObjektZuusctand ZiilOverviewObjekt,
            SictTargetZuusctand ZiilTarget)
        {
            var AufgaabeParamZerleegungErgeebnis = new SictAufgaabeParamZerleegungErgeebnis(null, false);

            if (null == AutomaatZuusctand)
            {
                return(AufgaabeParamZerleegungErgeebnis);
            }

            var NuzerZaitMili = AutomaatZuusctand.NuzerZaitMili;

            var ZiilOverviewObjektSictungLezteAlterMili = NuzerZaitMili - ((null == ZiilOverviewObjekt) ? null : ZiilOverviewObjekt.SictungLezteZait);

            var Gbs = AutomaatZuusctand.Gbs;
            var OverviewUndTarget               = AutomaatZuusctand.OverviewUndTarget;
            var FittingUndShipZuusctand         = AutomaatZuusctand.FittingUndShipZuusctand;
            var InRaumAktioonUndGefect          = AutomaatZuusctand.InRaumAktioonUndGefect;
            var AusScnapscusAuswertungZuusctand = AutomaatZuusctand.ListeScnapscusLezteAuswertungErgeebnisNaacSimu;

            var FürWirkungDestruktAufgaabeDroneEngageTarget = (null == InRaumAktioonUndGefect) ? null : InRaumAktioonUndGefect.FürWirkungDestruktAufgaabeDroneEngageTarget;

            var ScnapscusWindowDroneView = (null == AusScnapscusAuswertungZuusctand) ? null : AusScnapscusAuswertungZuusctand.WindowDroneView;

            var AnforderungDroneReturnLezte = (null == InRaumAktioonUndGefect) ? null : InRaumAktioonUndGefect.AnforderungDroneReturnLezte;

            var AnnaameDroneControlCountScrankeMaxNulbar = (null == FittingUndShipZuusctand) ? null : FittingUndShipZuusctand.AnnaameDroneControlCountScrankeMax;

            var MengeModuleRepr = (null == FittingUndShipZuusctand) ? null : FittingUndShipZuusctand.MengeModuleRepr;

            var MengeModuleUmscaltFraigaabe =
                AutomaatZuusctand.MengeModuleUmscaltFraigaabe
                .WhereNullable((KandidaatModule) => (null == KombiZuusctand) ? true : KombiZuusctand.ModuleVerwendungFraigaabe(KandidaatModule))
                .ToArrayNullable();

            var AnnaameTargetingDistanceScrankeMax = (null == FittingUndShipZuusctand) ? null : FittingUndShipZuusctand.AnnaameTargetingDistanceScrankeMax;

            var AnnaameModuleDestruktRangeMax           = (null == FittingUndShipZuusctand) ? null : FittingUndShipZuusctand.AnnaameModuleDestruktRangeMax;
            var AnnaameModuleDestruktRangeOptimumNulbar = (null == FittingUndShipZuusctand) ? null : FittingUndShipZuusctand.AnnaameModuleDestruktRangeOptimum;

            var AnnaameGefectDistanzOptimum = Bib3.Glob.Min(AnnaameModuleDestruktRangeOptimumNulbar, AnnaameTargetingDistanceScrankeMax);

            var ScritNääxteJammed      = (null == FittingUndShipZuusctand) ? null : FittingUndShipZuusctand.ScritNääxteJammed;
            var ScritÜüberNääxteJammed = (null == FittingUndShipZuusctand) ? null : FittingUndShipZuusctand.ScritÜüberNääxteJammed;

            var ListeAbovemainMessageDronesLezteAlter = (null == Gbs) ? null : Gbs.ListeAbovemainMessageDronesLezteAlter;
            var MengeTargetNocSictbar = (null == OverviewUndTarget) ? null : OverviewUndTarget.MengeTargetNocSictbar;

            bool DroneLaunchVolsctändig = false;

            if (ListeAbovemainMessageDronesLezteAlter < 3e+4)
            {
                DroneLaunchVolsctändig = true;
            }

            if (!DroneLaunchVolsctändig &&
                0 < ExtractFromOldAssembly.Bib3.Extension.CountNullable(MengeTargetNocSictbar) || (ScritNääxteJammed ?? false))
            {
                //	Drones Launch

                if (false == AnforderungDroneReturnLezte &&
                    null != ScnapscusWindowDroneView)
                {
                    //	Drones Launch

                    if (0 < ScnapscusWindowDroneView.DronesInBayAnzaal)
                    {
                        /*
                         * 2013.09.24
                         * Anforderung vorerst nur für Scpeziaalfal das nur fünf drones in space sain köne.
                         * Scpääter sol Anzaal nuzbaarer drones berüksictigt were.
                         * */
                        if ((AnnaameDroneControlCountScrankeMaxNulbar ?? 5) <= ScnapscusWindowDroneView.DronesInLocalSpaceAnzaal)
                        {
                            DroneLaunchVolsctändig = true;
                        }
                        else
                        {
                            AufgaabeParamZerleegungErgeebnis.FüügeAn(AufgaabeParamAndere.AufgaabeAktioonDroneLaunch());
                        }
                    }
                    else
                    {
                        DroneLaunchVolsctändig = true;
                    }
                }
            }

            var MengeModuleAinSol =
                MengeModuleUmscaltFraigaabe.IntersectNullable(
                    MengeModuleRepr.WhereNullable((KandidaatModule) =>
                                                  (((true == KandidaatModule.IstWirkmitelDestrukt) &&
                                                    (true == KandidaatModule.ChargeLoaded)) ||
                                                   (true == KandidaatModule.IstTargetPainter)) &&
                                                  !(true == KandidaatModule.AktiivBerecne(1))))
                .ToArrayNullable();

            if (null == ZiilTarget)
            {
                var MengeTargetPasend =
                    OverviewUndTarget.MengeTargetTailmengePasendZuOverviewObjektBerecne(ZiilOverviewObjekt);

                if (null != MengeTargetPasend)
                {
                    ZiilTarget = MengeTargetPasend.OrderBy((KandidaatTarget) => KandidaatTarget.SictungLezteDistanceScrankeMaxScpezTarget ?? int.MaxValue).FirstOrDefault();
                }
            }

            if (null == ZiilTarget)
            {
                if (null != ZiilOverviewObjekt)
                {
                    if (!(GefectListeLockedTargetScranke <= ExtractFromOldAssembly.Bib3.Extension.CountNullable(MengeTargetNocSictbar)))
                    {
                        if (true == ZiilOverviewObjekt.TargetingOderTargeted &&
                            7777 < ZiilOverviewObjektSictungLezteAlterMili)
                        {
                            AufgaabeParamZerleegungErgeebnis.FüügeAn(AufgaabeParamAndere.AufgaabeInOverViewMaceSictbar(ZiilOverviewObjekt));
                        }
                        else
                        {
                            var DistanceHinraicendGeringFürLock = true;

                            if (0 < ExtractFromOldAssembly.Bib3.Extension.CountNullable(MengeTargetNocSictbar))
                            {
                                if (ZiilOverviewObjekt.SaitSictbarkaitLezteListeScritAnzaal < 1)
                                {
                                    if (AnnaameTargetingDistanceScrankeMax < ZiilOverviewObjekt.SictungLezteDistanceScrankeMaxScpezOverview &&
                                        NuzerZaitMili - 4444 < ZiilOverviewObjekt.SictungLezteZait)
                                    {
                                        DistanceHinraicendGeringFürLock = false;
                                    }

                                    if (AnnaameGefectDistanzOptimum < ZiilOverviewObjekt.SictungLezteDistanceScrankeMaxScpezOverview)
                                    {
                                        DistanceHinraicendGeringFürLock = false;
                                    }
                                }
                            }

                            if (DistanceHinraicendGeringFürLock)
                            {
                                AufgaabeParamZerleegungErgeebnis.FüügeAn(new AufgaabeParamLockTarget(ZiilOverviewObjekt));
                            }
                            else
                            {
                                AufgaabeParamZerleegungErgeebnis.ZerleegungVolsctändigSezeAus();
                            }
                        }
                    }

                    if (!(ZiilOverviewObjekt.SictungLezteDistanceScrankeMaxScpezOverview < AnnaameGefectDistanzOptimum))
                    {
                        AufgaabeParamZerleegungErgeebnis.FüügeAn(AufgaabeParamAndere.AufgaabeDistanceAinzusctele(ZiilOverviewObjekt, null, AnnaameGefectDistanzOptimum));
                    }
                }
            }
            else
            {
                var AnnaameDroneCommandRange = (null == FittingUndShipZuusctand) ? null : FittingUndShipZuusctand.AnnaameDroneCommandRange;

                var TargetDistancePasendFürModule = false;
                var TargetDistancePasendFürDrone  = false;

                //	!!!!	zu ergänze: Berecnung soldistance für Turret
                //	!!!!	zu ergänze: Berecnung TargetMengeModuleAinSol: untermenge von MengeModuleAinSol da Module untersciidlice optimaale Distance haabe (TargetPainter)
                if (ZiilTarget.SictungLezteDistanceScrankeMaxScpezTarget < AnnaameGefectDistanzOptimum)
                {
                    TargetDistancePasendFürModule = true;
                }

                {
                    AufgaabeParamZerleegungErgeebnis.FüügeAn(AufgaabeParamAndere.AufgaabeDistanceAinzusctele(ZiilTarget, null, AnnaameGefectDistanzOptimum));
                }

                if (ZiilTarget.SictungLezteDistanceScrankeMaxScpezTarget < AnnaameDroneCommandRange)
                {
                    TargetDistancePasendFürDrone = true;
                }

                var DroneEngage =
                    DroneLaunchVolsctändig &&
                    TargetDistancePasendFürDrone &&
                    true == FürWirkungDestruktAufgaabeDroneEngageTarget;

                if (DroneEngage || !MengeModuleAinSol.IsNullOrEmpty())
                {
                    {
                        if (TargetDistancePasendFürModule)
                        {
                            AufgaabeParamZerleegungErgeebnis.FüügeAn(AufgaabeParamAndere.KonstruktTargetInputFookusSeze(ZiilTarget));
                        }
                    }
                }

                if (!MengeModuleAinSol.IsNullOrEmpty())
                {
                    //	Hiir werd nuur waitergemact wen noc mindesctens ain Module noc aigescaltet werde sol.

                    if (true == ZiilTarget.InputFookusTransitioonLezteZiilWert)
                    {
                        if (TargetDistancePasendFürModule)
                        {
                            AufgaabeParamZerleegungErgeebnis.FüügeAn(
                                MengeModuleAinSol.Select((ModuleAinSol) => AufgaabeParamAndere.KonstruktModuleScalteAin(ModuleAinSol)));
                        }
                    }
                }

                if (DroneEngage)
                {
                    if (true == ZiilTarget.InputFookusTransitioonLezteZiilWert)
                    {
                        AufgaabeParamZerleegungErgeebnis.FüügeAn(AufgaabeParamAndere.KonstruktDronesEngage(ZiilTarget));
                    }
                }
            }

            return(AufgaabeParamZerleegungErgeebnis);
        }
Exemple #4
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="AutomaatZuusctand"></param>
        /// <param name="StrategikonInstanz"></param>
        /// <param name="InStrategikonAtom"></param>
        /// <param name="MengeObjektGrupeMesungZaitScrankeMin">
        /// Früheste Zait zu der dii Mesung der Objekt Grupe zum ausscliise der Existenz noc zu bearbaitender Objekte begine darf.</param>
        public void Aktualisiire(
            SictAutomatZuusctand AutomaatZuusctand,
            SictMissionStrategikonInstanz StrategikonInstanz,
            SictMissionStrategikonInRaumAtom InStrategikonAtom,
            Int64?MengeObjektGrupeMesungZaitScrankeMin)
        {
            this.MengeObjektGrupeMesungZaitScrankeMin = MengeObjektGrupeMesungZaitScrankeMin;

            var AtomZwisceergeebnis = this;

            if (null == AutomaatZuusctand)
            {
                return;
            }

            if (null == StrategikonInstanz)
            {
                return;
            }

            var ZaitMili = AutomaatZuusctand.NuzerZaitMili;

            var RaumMengeObjektCargoDurcsuuct = StrategikonInstanz.MengeObjektCargoDurcsuuct;

            var OverviewUndTarget = (null == AutomaatZuusctand) ? null : AutomaatZuusctand.OverviewUndTarget;

            var MengeInRaumObjekt = (null == OverviewUndTarget) ? null : OverviewUndTarget.MengeOverViewObjekt;

            Int64?ErfolgTailVorMengeOverviewObjektGrupeMesungZuErscteleZait = null;

            SictOverviewObjektGrupeEnum[] ZuMengeObjektGrupeMesungVolsctändigFeelend = null;
            var   AtomZwisceergeebnisErfolg = false;
            Int64?MesungMengeObjektGrupeZaitScrankeMinPlusBeruhigungszait = null;

            try
            {
                if (null == InStrategikonAtom)
                {
                    AtomZwisceergeebnisErfolg = true;
                    return;
                }

                if (null == MengeInRaumObjekt)
                {
                    return;
                }

                var InStrategikonAtomMengeObjektFilter = InStrategikonAtom.MengeObjektFilter;

                var InStrategikonAtomMengeObjektFilterGrupe =
                    (null == InStrategikonAtomMengeObjektFilter) ? null :
                    Bib3.Glob.ArrayAusListeFeldGeflact(
                        InStrategikonAtomMengeObjektFilter.Select((ObjektFilter) =>
                {
                    var BedingungTypeUndName = ObjektFilter.BedingungTypeUndName;

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

                    return(BedingungTypeUndName.MengeGrupeZuDurcsuuce);
                })
                        .Where((Kandidaat) => null != Kandidaat))
                    .Distinct()
                    .ToArray();

                var MengeObjektGefiltert = MengeInRaumObjektGefiltert(MengeInRaumObjekt, InStrategikonAtomMengeObjektFilter);

                var MengeObjektGefiltertNocSictbar =
                    (null == MengeObjektGefiltert) ? null :
                    MengeObjektGefiltert.Where((OverViewObjekt) => ZaitMili <= OverViewObjekt.SictungLezteZait).ToArray();

                var BedingungObjektExistentErfült = false;

                SictOverViewObjektZuusctand[] MengeObjektCargoZuDurcsuuce = null;
                SictOverViewObjektZuusctand[] MengeObjektZuZersctööre     = null;
                KeyValuePair <SictOverViewObjektZuusctand, Int64>?ObjektAnzufliigeUndDistanceScranke = null;

                var FilterCargoZuDurcsuuce =
                    new Func <SictOverViewObjektZuusctand, bool>((InRaumObjekt) => SictMissionZuusctand.FilterCargoZuDurcsuuce(InRaumObjekt, RaumMengeObjektCargoDurcsuuct));

                if (!(true == InStrategikonAtom.BedingungObjektExistent) ||
                    !MengeObjektGefiltertNocSictbar.IsNullOrEmpty())
                {
                    BedingungObjektExistentErfült = true;
                }

                var InStrategikonAtomZuObjektDistanzAinzuscteleScrankeMax = InStrategikonAtom.ZuObjektDistanzAinzuscteleScrankeMax;

                if (null != MengeObjektGefiltert)
                {
                    if (true == InStrategikonAtom.ObjektDurcsuuceCargo)
                    {
                        MengeObjektCargoZuDurcsuuce = MengeObjektGefiltert.Where(FilterCargoZuDurcsuuce).ToArray();
                    }

                    if (true == InStrategikonAtom.ObjektZersctööre)
                    {
                        MengeObjektZuZersctööre = MengeObjektGefiltert;
                    }

                    if (InStrategikonAtomZuObjektDistanzAinzuscteleScrankeMax.HasValue)
                    {
                        var MengeObjektGefiltertDistanceNitPasend =
                            MengeObjektGefiltert.Where((InRaumObjekt) => !(InRaumObjekt.SictungLezteDistanceScrankeMaxScpezOverview <= InStrategikonAtomZuObjektDistanzAinzuscteleScrankeMax.Value)).ToArray();

                        if (0 < MengeObjektGefiltertDistanceNitPasend.Length)
                        {
                            ObjektAnzufliigeUndDistanceScranke = new KeyValuePair <SictOverViewObjektZuusctand, Int64>(
                                MengeObjektGefiltertDistanceNitPasend.FirstOrDefault(), InStrategikonAtomZuObjektDistanzAinzuscteleScrankeMax.Value);
                        }
                    }
                }

                var AtomZwisceergeebnisMengeAufgaabeObjektZuBearbaite = new List <SictAufgaabeParam>();

                if (ObjektAnzufliigeUndDistanceScranke.HasValue)
                {
                    if (null != ObjektAnzufliigeUndDistanceScranke.Value.Key)
                    {
                        AtomZwisceergeebnisMengeAufgaabeObjektZuBearbaite.Add(
                            AufgaabeParamAndere.AufgaabeDistanceAinzusctele(
                                ObjektAnzufliigeUndDistanceScranke.Value.Key, null, ObjektAnzufliigeUndDistanceScranke.Value.Value));
                    }
                }

                if (null != MengeObjektCargoZuDurcsuuce)
                {
                    AtomZwisceergeebnisMengeAufgaabeObjektZuBearbaite.AddRange(
                        MengeObjektCargoZuDurcsuuce.Select((InRaumObjekt) => AufgaabeParamAndere.AufgaabeAktioonCargoDurcsuuce(InRaumObjekt)));
                }

                if (null != MengeObjektZuZersctööre)
                {
                    AtomZwisceergeebnisMengeAufgaabeObjektZuBearbaite.AddRange(
                        MengeObjektZuZersctööre.Select((InRaumObjekt) => new AufgaabeParamDestrukt(InRaumObjekt)));
                }

                AtomZwisceergeebnis.MengeAufgaabeObjektZuBearbaite = AtomZwisceergeebnisMengeAufgaabeObjektZuBearbaite.ToArray();

                if (MengeObjektCargoZuDurcsuuce.IsNullOrEmpty())
                {
                    if (!AtomZwisceergeebnis.CargoDurcsuuceErfolgZait.HasValue)
                    {
                        AtomZwisceergeebnis.CargoDurcsuuceErfolgZait = ZaitMili;
                    }
                }
                else
                {
                    AtomZwisceergeebnis.CargoDurcsuuceErfolgZait = null;
                }

                if (MengeObjektZuZersctööre.IsNullOrEmpty())
                {
                    if (!AtomZwisceergeebnis.ZersctööreErfolgZait.HasValue)
                    {
                        AtomZwisceergeebnis.ZersctööreErfolgZait = ZaitMili;
                    }
                }
                else
                {
                    AtomZwisceergeebnis.ZersctööreErfolgZait = null;
                }

                if (ObjektAnzufliigeUndDistanceScranke.HasValue)
                {
                    AtomZwisceergeebnis.AnfliigeErfolgZait = null;
                }
                else
                {
                    if (!AtomZwisceergeebnis.AnfliigeErfolgZait.HasValue)
                    {
                        AtomZwisceergeebnis.AnfliigeErfolgZait = ZaitMili;
                    }
                }

                if (BedingungObjektExistentErfült)
                {
                    if (!AtomZwisceergeebnis.ObjektExistentErfolgZait.HasValue)
                    {
                        AtomZwisceergeebnis.ObjektExistentErfolgZait = ZaitMili;
                    }
                }
                else
                {
                    AtomZwisceergeebnis.ObjektExistentErfolgZait = null;
                }

                var ScritBedingungErfültBeruhigungszaitMili = InStrategikonAtom.ScritBedingungErfültBeruhigungszaitMili ?? 1000;

                var AtomZwisceergeebnisMengeScpezielErfültZaitNulbar = new Int64?[] {
                    AtomZwisceergeebnis.CargoDurcsuuceErfolgZait,
                    AtomZwisceergeebnis.ZersctööreErfolgZait,
                    AtomZwisceergeebnis.AnfliigeErfolgZait,
                    AtomZwisceergeebnis.ObjektExistentErfolgZait
                };

                if (AtomZwisceergeebnisMengeScpezielErfültZaitNulbar.Any((ScpezielErfültZaitNulbar) => !ScpezielErfültZaitNulbar.HasValue))
                {
                    //	Aine der Scpezialisiirte Aufgaabe isc noc nit erfült.
                    return;
                }

                ErfolgTailVorMengeOverviewObjektGrupeMesungZuErscteleZait =
                    Bib3.Glob.Max(AtomZwisceergeebnisMengeScpezielErfültZaitNulbar) ?? 0;

                var MesungMengeObjektGrupeZaitScrankeMin =
                    Bib3.Glob.Max(ErfolgTailVorMengeOverviewObjektGrupeMesungZuErscteleZait, MengeObjektGrupeMesungZaitScrankeMin) ?? 0;

                MesungMengeObjektGrupeZaitScrankeMinPlusBeruhigungszait =
                    MesungMengeObjektGrupeZaitScrankeMin + ScritBedingungErfültBeruhigungszaitMili;

                ZuMengeObjektGrupeMesungVolsctändigFeelend =
                    OverviewUndTarget.MengeObjektGrupeUntermengeOoneOverviewViewportFolgeVolsctändigNaacZait(
                        InStrategikonAtomMengeObjektFilterGrupe,
                        MesungMengeObjektGrupeZaitScrankeMin);

                if (!ZuMengeObjektGrupeMesungVolsctändigFeelend.IsNullOrEmpty())
                {
                    //	Verzwaigung Für Debug Haltepunkt
                }

                if (MesungMengeObjektGrupeZaitScrankeMinPlusBeruhigungszait < ZaitMili)
                {
                    /*
                     * 2014.06.12
                     *
                     * Korektur: Versciibe diise Blok naac finally um überscraibe des vorherige Wert mit null zu ermööglice fals try Blok scon vorher unterbroce werd.
                     *
                     * AtomZwisceergeebnis.MengeOverviewObjektGrupeMesungZuErsctele = ZuMengeObjektGrupeMesungVolsctändigFeelend;
                     *
                     * //	if (ZuMengeObjektGrupeMesungVolsctändigFeelend.Length < 1)
                     * if (Optimat.Glob.NullOderLeer(ZuMengeObjektGrupeMesungVolsctändigFeelend))
                     * {
                     *      AtomZwisceergeebnisErfolg = true;
                     * }
                     * */
                }
            }
            finally
            {
                AtomZwisceergeebnis.MengeOverviewObjektGrupeMesungZuErsctele = ZuMengeObjektGrupeMesungVolsctändigFeelend;

                /*
                 * 2014.07.10	Korektur: zuusäzlice Bedingung:
                 * MesungMengeObjektGrupeZaitScrankeMinPlusBeruhigungszait < ZaitMili
                 *
                 * //	if (ZuMengeObjektGrupeMesungVolsctändigFeelend.Length < 1)
                 * if (Optimat.Glob.NullOderLeer(ZuMengeObjektGrupeMesungVolsctändigFeelend))
                 * {
                 *      AtomZwisceergeebnisErfolg = true;
                 * }
                 * */

                if (MesungMengeObjektGrupeZaitScrankeMinPlusBeruhigungszait < ZaitMili)
                {
                    if (ZuMengeObjektGrupeMesungVolsctändigFeelend.IsNullOrEmpty())
                    {
                        AtomZwisceergeebnisErfolg = true;
                    }
                }

                AtomZwisceergeebnis.ErfolgTailVorMengeOverviewObjektGrupeMesungZuErscteleZait =
                    ErfolgTailVorMengeOverviewObjektGrupeMesungZuErscteleZait;

                if (ErfolgTailVorMengeOverviewObjektGrupeMesungZuErscteleZait.HasValue)
                {
                    AtomZwisceergeebnis.ErfolgTailVorMengeOverviewObjektGrupeMesungZuErscteleZaitLezte = ErfolgTailVorMengeOverviewObjektGrupeMesungZuErscteleZait;
                }

                if (AtomZwisceergeebnisErfolg)
                {
                    AtomZwisceergeebnis.EntscaidungErfolgLezteZait = ZaitMili;
                }
                else
                {
                    AtomZwisceergeebnis.EntscaidungErfolgLezteZait = null;
                }

                AtomZwisceergeebnis.AktualisiireTailEntscaidungErfolgFrühesteZait();
            }
        }