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); }