Example #1
0
        public static int GetNumRidersPerSquad(
            WeaponEnums.TurretClasses mountType,
            ShipClass carrierClass,
            int totalMounts)
        {
            int val1;

            switch (carrierClass)
            {
            case ShipClass.Cruiser:
            case ShipClass.Dreadnought:
                val1 = 3;
                break;

            case ShipClass.Leviathan:
                val1 = mountType != WeaponEnums.TurretClasses.DestroyerRider ? 3 : 6;
                break;

            default:
                val1 = totalMounts;
                break;
            }
            if (WeaponEnums.IsWeaponBattleRider(mountType))
            {
                val1 = totalMounts;
            }
            return(Math.Min(val1, totalMounts));
        }
Example #2
0
        public static bool RequiresDesign(
            WeaponEnums.TurretClasses turretClass,
            out RealShipClasses correspondingShipClass)
        {
            switch (turretClass)
            {
            case WeaponEnums.TurretClasses.Biomissile:
                correspondingShipClass = RealShipClasses.Biomissile;
                return(true);

            case WeaponEnums.TurretClasses.Drone:
                correspondingShipClass = RealShipClasses.Drone;
                return(true);

            case WeaponEnums.TurretClasses.AssaultShuttle:
                correspondingShipClass = RealShipClasses.AssaultShuttle;
                return(true);

            case WeaponEnums.TurretClasses.BoardingPod:
                correspondingShipClass = RealShipClasses.BoardingPod;
                return(true);

            default:
                correspondingShipClass = RealShipClasses.AssaultShuttle;
                return(false);
            }
        }
Example #3
0
 public WeaponBank(
     App game,
     IGameObject owner,
     LogicalBank bank,
     Module module,
     LogicalWeapon weapon,
     int weaponLevel,
     int designID,
     int targetFilter,
     int fireMode,
     WeaponEnums.WeaponSizes weaponSize,
     WeaponEnums.TurretClasses turretClass)
 {
     this.Owner           = owner;
     this.Weapon          = weapon;
     this.LogicalBank     = bank;
     this.Module          = module;
     this.WeaponLevel     = weaponLevel;
     this.DesignID        = designID;
     this.TargetFilter    = targetFilter;
     this.FireMode        = fireMode;
     this.TurretClass     = turretClass;
     this.WeaponSize      = weaponSize;
     this.m_ToggleStateOn = false;
 }
 public AttackRiderLaunchControl(
     App game,
     CombatAI commanderAI,
     Ship ship,
     WeaponEnums.TurretClasses weaponType)
     : base(game, commanderAI, ship, weaponType)
 {
     this.m_CurrMaxLaunchDelay = BattleRiderLaunchControl.kMinRiderHoldDuration * 5;
     this.m_LaunchDelay        = this.m_CurrMaxLaunchDelay;
 }
 public LargeRiderLaunchControl(
     App game,
     CombatAI commanderAI,
     Ship ship,
     WeaponEnums.TurretClasses weaponType)
     : base(game, commanderAI, ship, weaponType)
 {
     this.m_LaunchDelay   = BattleRiderLaunchControl.kMinRiderHoldDuration;
     this.m_MinAttackDist = game.AssetDatabase.DefaultTacSensorRange;
 }
Example #6
0
        public static bool DesignIsSelectable(WeaponEnums.TurretClasses turretClass)
        {
            switch (turretClass)
            {
            case WeaponEnums.TurretClasses.Drone:
            case WeaponEnums.TurretClasses.AssaultShuttle:
                return(true);

            default:
                return(false);
            }
        }
Example #7
0
        public static bool IsPlanetAssaultWeapon(WeaponEnums.TurretClasses tc)
        {
            switch (tc)
            {
            case WeaponEnums.TurretClasses.Biomissile:
            case WeaponEnums.TurretClasses.AssaultShuttle:
            case WeaponEnums.TurretClasses.Siege:
                return(true);

            default:
                return(false);
            }
        }
 private bool CanMountBattleRider(DesignInfo design)
 {
     WeaponEnums.TurretClasses?turretclass = StrategicAI.BattleRiderMountSet.GetMatchingTurretClass(design);
     return(this.RiderListMap.FirstOrDefault <DialogLoaFleetCompositor.RiderStruct>((Func <DialogLoaFleetCompositor.RiderStruct, bool>)(x => x.WingData.Any <DialogLoaFleetCompositor.RiderWingStruct>((Func <DialogLoaFleetCompositor.RiderWingStruct, bool>)(j =>
     {
         WeaponEnums.TurretClasses turretClasses = j.wingdata.Class;
         WeaponEnums.TurretClasses?nullable = turretclass;
         if ((turretClasses != nullable.GetValueOrDefault() ? 0 : (nullable.HasValue ? 1 : 0)) != 0)
         {
             return !j.riders.Any <int>();
         }
         return false;
     })))) != null);
 }
Example #9
0
        public static bool IsWeaponBattleRider(WeaponEnums.TurretClasses shipType)
        {
            switch (shipType)
            {
            case WeaponEnums.TurretClasses.Biomissile:
            case WeaponEnums.TurretClasses.Drone:
            case WeaponEnums.TurretClasses.AssaultShuttle:
            case WeaponEnums.TurretClasses.BoardingPod:
                return(true);

            default:
                return(false);
            }
        }
Example #10
0
 public static IEnumerable <LogicalWeapon> EnumerateWeaponFits(
     string faction,
     string sectionName,
     IEnumerable <LogicalWeapon> weapons,
     WeaponEnums.WeaponSizes mountTurretSize,
     WeaponEnums.TurretClasses mountTurretClass)
 {
     foreach (LogicalWeapon weapon in weapons)
     {
         if (weapon.IsVisible && weapon.IsSectionCompatable(faction, sectionName) && LogicalTurretClass.GetLogicalTurretClassForMount((IEnumerable <LogicalTurretClass>)weapon.TurretClasses, weapon.DefaultWeaponSize, weapon.DefaultWeaponClass, mountTurretSize, mountTurretClass) != null)
         {
             yield return(weapon);
         }
     }
 }
Example #11
0
 public static LogicalTurretClass GetLogicalTurretClassForMount(
     IEnumerable <LogicalTurretClass> turretClasses,
     WeaponEnums.WeaponSizes defaultWeaponSize,
     WeaponEnums.TurretClasses defaultWeaponClass,
     WeaponEnums.WeaponSizes mountSize,
     WeaponEnums.TurretClasses mountClass)
 {
     foreach (LogicalTurretClass turretClass in turretClasses)
     {
         if (turretClass.TurretClass == mountClass && turretClass.TurretSize == mountSize)
         {
             return(turretClass);
         }
     }
     return((LogicalTurretClass)null);
 }
Example #12
0
 public SpecWeaponControl(
     App game,
     CombatAI commanderAI,
     Ship ship,
     WeaponEnums.TurretClasses weaponType)
 {
     this.m_Game                = game;
     this.m_CommanderAI         = commanderAI;
     this.m_Ship                = ship;
     this.m_WeaponType          = weaponType;
     this.m_CurrentWeaponTarget = (WeaponTarget)null;
     this.m_RequestNewTarget    = false;
     this.m_RequestHoldShip     = false;
     this.m_CurrUpdateFrame     = commanderAI.AIRandom.NextInclusive(1, SpecWeaponControl.kRemoveUpdateRate);
     ship.WeaponControls.Add(this);
 }
Example #13
0
        public AttackPlanetControl(
            App game,
            CombatAI commanderAI,
            Ship ship,
            WeaponEnums.TurretClasses weaponType)
            : base(game, commanderAI, ship, weaponType)
        {
            this.m_TargetPlanet = (StellarBody)null;
            WeaponBank weaponBank = ship.WeaponBanks.FirstOrDefault <WeaponBank>((Func <WeaponBank, bool>)(x => x.TurretClass == weaponType));

            if (weaponBank == null)
            {
                return;
            }
            this.m_WeaponID = weaponBank.Weapon.UniqueWeaponID;
        }
        public TachyonCannonAttackControl(
            App game,
            CombatAI commanderAI,
            Ship ship,
            int weaponID,
            WeaponEnums.TurretClasses weaponType)
            : base(game, commanderAI, ship, weaponID, weaponType)
        {
            WeaponBank weaponBank = ship.WeaponBanks.FirstOrDefault <WeaponBank>((Func <WeaponBank, bool>)(x => x.Weapon.UniqueWeaponID == weaponID));

            if (weaponBank == null)
            {
                return;
            }
            this.m_MaxRange = weaponBank.Weapon.Range;
        }
Example #15
0
        public static bool CanBattleRiderConnect(
            WeaponEnums.TurretClasses mountType,
            BattleRiderTypes brct,
            ShipClass sc)
        {
            switch (mountType)
            {
            case WeaponEnums.TurretClasses.Biomissile:
                return(brct == BattleRiderTypes.biomissile);

            case WeaponEnums.TurretClasses.Drone:
                return(brct == BattleRiderTypes.drone);

            case WeaponEnums.TurretClasses.AssaultShuttle:
                return(brct == BattleRiderTypes.assaultshuttle);

            case WeaponEnums.TurretClasses.DestroyerRider:
                if (brct.IsBattleRiderType())
                {
                    return(sc == ShipClass.BattleRider);
                }
                return(false);

            case WeaponEnums.TurretClasses.CruiserRider:
                if (brct.IsControllableBattleRider())
                {
                    return(sc == ShipClass.Cruiser);
                }
                return(false);

            case WeaponEnums.TurretClasses.DreadnoughtRider:
                if (brct.IsControllableBattleRider())
                {
                    return(sc == ShipClass.Dreadnought);
                }
                return(false);

            case WeaponEnums.TurretClasses.BoardingPod:
                return(brct == BattleRiderTypes.boardingpod);

            case WeaponEnums.TurretClasses.EscapePod:
                return(brct == BattleRiderTypes.escapepod);

            default:
                return(false);
            }
        }
Example #16
0
        public MineLayerControl(
            App game,
            CombatAI commanderAI,
            Ship ship,
            WeaponEnums.TurretClasses weaponType)
            : base(game, commanderAI, ship, weaponType)
        {
            this.m_ForceOn = false;
            WeaponBank weaponBank = ship.WeaponBanks.FirstOrDefault <WeaponBank>((Func <WeaponBank, bool>)(x => x.TurretClass == weaponType));

            if (weaponBank != null)
            {
                this.m_WeaponID = weaponBank.Weapon.UniqueWeaponID;
            }
            this.m_MaxPos = Vector3.Zero;
            this.m_MinPos = Vector3.Zero;
        }
Example #17
0
 public BattleRiderLaunchControl(
     App game,
     CombatAI commanderAI,
     Ship ship,
     WeaponEnums.TurretClasses weaponType)
     : base(game, commanderAI, ship, weaponType)
 {
     this.m_Riders             = new List <Ship>();
     this.m_LaunchingRiders    = new List <Ship>();
     this.m_LaunchedRiders     = new List <Ship>();
     this.m_LaunchDelay        = 0;
     this.m_CurrMaxLaunchDelay = 0;
     this.m_MinAttackDist      = 0.0f;
     this.m_HasLaunchedBefore  = false;
     this.m_RidersAdded        = 0;
     this.m_RidersRemoved      = 0;
     this.m_RemoveDelay        = 120;
 }
Example #18
0
        public static int GetMinRiderSlotsPerSquad(
            WeaponEnums.TurretClasses mountType,
            ShipClass carrierClass)
        {
            int num = 0;

            switch (carrierClass)
            {
            case ShipClass.Cruiser:
            case ShipClass.Dreadnought:
                num = 3;
                break;

            case ShipClass.Leviathan:
                num = mountType != WeaponEnums.TurretClasses.DestroyerRider ? 3 : 6;
                break;
            }
            return(num);
        }
Example #19
0
        public PositionalAttackControl(
            App game,
            CombatAI commanderAI,
            Ship ship,
            int weaponID,
            WeaponEnums.TurretClasses weaponType)
            : base(game, commanderAI, ship, weaponType)
        {
            this.m_DetonatingWeapon = false;
            WeaponBank weaponBank = ship.WeaponBanks.FirstOrDefault <WeaponBank>((Func <WeaponBank, bool>)(x => x.Weapon.UniqueWeaponID == weaponID));

            if (weaponBank != null)
            {
                this.m_WeaponSpeed      = weaponBank.Weapon.Speed;
                this.m_WeaponID         = weaponBank.Weapon.UniqueWeaponID;
                this.m_DetonatingWeapon = ((IEnumerable <WeaponEnums.WeaponTraits>)weaponBank.Weapon.Traits).Contains <WeaponEnums.WeaponTraits>(WeaponEnums.WeaponTraits.Detonating);
            }
            this.m_TargetSet      = false;
            this.m_TargetPosition = Vector3.Zero;
            this.m_HoldShipDelay  = 0;
        }
Example #20
0
 public PlanetWeaponBank(
     App game,
     IGameObject owner,
     LogicalBank bank,
     Module module,
     LogicalWeapon weapon,
     int weaponLevel,
     LogicalWeapon subWeapon,
     WeaponEnums.TurretClasses tClass,
     string model,
     string subModel,
     float thinkTime,
     int numLaunchers)
     : base(game, owner, bank, module, weapon, weaponLevel, 0, 0, 0, weapon.DefaultWeaponSize, tClass)
 {
     this.SubWeapon      = subWeapon;
     this.WeaponModel    = model;
     this.SubWeaponModel = subModel;
     this.ThinkTime      = thinkTime;
     this.NumLaunchers   = numLaunchers;
 }
Example #21
0
        public static WeaponTechModifiers ObtainWeaponTechModifiers(
            AssetDatabase ab,
            WeaponEnums.TurretClasses tc,
            LogicalWeapon weapon,
            IEnumerable <PlayerTechInfo> playerTechs)
        {
            WeaponTechModifiers weaponTechModifiers = new WeaponTechModifiers();

            weaponTechModifiers.DamageModifier = 0.0f;
            weaponTechModifiers.SpeedModifier  = 0.0f;
            weaponTechModifiers.AccelModifier  = 0.0f;
            weaponTechModifiers.MassModifier   = 0.0f;
            weaponTechModifiers.ROFModifier    = 1f;
            weaponTechModifiers.RangeModifier  = 0.0f;
            weaponTechModifiers.SmartNanites   = false;
            if (weapon == null || playerTechs == null || playerTechs.Count <PlayerTechInfo>() == 0)
            {
                return(weaponTechModifiers);
            }
            if (tc != WeaponEnums.TurretClasses.Torpedo && weapon.PayloadType == WeaponEnums.PayloadTypes.Bolt)
            {
                PlayerTechInfo playerTechInfo1 = playerTechs.FirstOrDefault <PlayerTechInfo>((Func <PlayerTechInfo, bool>)(x => x.TechFileID == "BAL_Neutronium_Rounds"));
                PlayerTechInfo playerTechInfo2 = playerTechs.FirstOrDefault <PlayerTechInfo>((Func <PlayerTechInfo, bool>)(x => x.TechFileID == "BAL_Acceleration_Amplification"));
                if (playerTechInfo1 != null && playerTechInfo1.State == TechStates.Researched)
                {
                    weaponTechModifiers.DamageModifier += ab.GetTechBonus <float>(playerTechInfo1.TechFileID, "damage");
                    weaponTechModifiers.MassModifier   += ab.GetTechBonus <float>(playerTechInfo1.TechFileID, "mass");
                }
                if (playerTechInfo2 != null && playerTechInfo2.State == TechStates.Researched)
                {
                    weaponTechModifiers.DamageModifier += ab.GetTechBonus <float>(playerTechInfo2.TechFileID, "damage");
                    weaponTechModifiers.SpeedModifier  += ab.GetTechBonus <float>(playerTechInfo2.TechFileID, "speed");
                }
            }
            if (weapon.PayloadType == WeaponEnums.PayloadTypes.Missile)
            {
                PlayerTechInfo playerTechInfo1 = playerTechs.FirstOrDefault <PlayerTechInfo>((Func <PlayerTechInfo, bool>)(x => x.TechFileID == "WAR_MicroFusion_Drives"));
                PlayerTechInfo playerTechInfo2 = playerTechs.FirstOrDefault <PlayerTechInfo>((Func <PlayerTechInfo, bool>)(x => x.TechFileID == "NRG_Ionic_Thruster"));
                if (playerTechInfo1 != null && playerTechInfo1.State == TechStates.Researched)
                {
                    weaponTechModifiers.SpeedModifier += ab.GetTechBonus <float>(playerTechInfo1.TechFileID, "speed");
                    weaponTechModifiers.RangeModifier += ab.GetTechBonus <float>(playerTechInfo1.TechFileID, "range");
                }
                if (playerTechInfo2 != null && playerTechInfo2.State == TechStates.Researched)
                {
                    weaponTechModifiers.SpeedModifier += ab.GetTechBonus <float>(playerTechInfo2.TechFileID, "speed");
                    weaponTechModifiers.AccelModifier += ab.GetTechBonus <float>(playerTechInfo2.TechFileID, "accel");
                }
            }
            if (weapon.PayloadType == WeaponEnums.PayloadTypes.Beam)
            {
                PlayerTechInfo playerTechInfo = playerTechs.FirstOrDefault <PlayerTechInfo>((Func <PlayerTechInfo, bool>)(x => x.TechFileID == "NRG_Quantum_Capacitors"));
                if (playerTechInfo != null && playerTechInfo.State == TechStates.Researched)
                {
                    weaponTechModifiers.ROFModifier += ab.GetTechBonus <float>(playerTechInfo.TechFileID, "rateoffire");
                }
            }
            if (((IEnumerable <WeaponEnums.WeaponTraits>)weapon.Traits).Contains <WeaponEnums.WeaponTraits>(WeaponEnums.WeaponTraits.Ballistic))
            {
                PlayerTechInfo playerTechInfo = playerTechs.FirstOrDefault <PlayerTechInfo>((Func <PlayerTechInfo, bool>)(x => x.TechFileID == "BAL_VRF_Systems"));
                if (playerTechInfo != null && playerTechInfo.State == TechStates.Researched)
                {
                    weaponTechModifiers.ROFModifier += ab.GetTechBonus <float>(playerTechInfo.TechFileID, "rateoffire");
                }
            }
            if (((IEnumerable <WeaponEnums.WeaponTraits>)weapon.Traits).Contains <WeaponEnums.WeaponTraits>(WeaponEnums.WeaponTraits.Nanite))
            {
                PlayerTechInfo playerTechInfo = playerTechs.FirstOrDefault <PlayerTechInfo>((Func <PlayerTechInfo, bool>)(x => x.TechFileID == "IND_Smart_Nanites"));
                weaponTechModifiers.SmartNanites = playerTechInfo != null && playerTechInfo.State == TechStates.Researched;
            }
            return(weaponTechModifiers);
        }
        private void AddDesign(int designid)
        {
            DesignInfo designInfo = this._app.GameDatabase.GetDesignInfo(designid);

            if (designInfo.Class == ShipClass.BattleRider && !this.CanMountBattleRider(designInfo))
            {
                return;
            }
            if (!this.SelectedDesigns.ContainsKey(designid))
            {
                this.SelectedDesigns.Add(designid, 1);
            }
            else
            {
                Dictionary <int, int> selectedDesigns;
                int index;
                (selectedDesigns = this.SelectedDesigns)[index = designid] = selectedDesigns[index] + 1;
            }
            int selectedDesign          = this.SelectedDesigns[designid];
            List <CarrierWingData> list = RiderManager.GetDesignBattleriderWingData(this._app, designInfo).ToList <CarrierWingData>();

            if (list.Any <CarrierWingData>())
            {
                DialogLoaFleetCompositor.RiderStruct riderStruct = new DialogLoaFleetCompositor.RiderStruct();
                foreach (CarrierWingData carrierWingData in list)
                {
                    riderStruct.WingData.Add(new DialogLoaFleetCompositor.RiderWingStruct()
                    {
                        wingdata = carrierWingData
                    });
                }
                riderStruct.CarrierDesignID          = designid;
                riderStruct.SelectedDesignCarrierKey = selectedDesign;
                this.RiderListMap.Add(riderStruct);
            }
            if (designInfo.Class != ShipClass.BattleRider)
            {
                return;
            }
            WeaponEnums.TurretClasses?           turretclass  = StrategicAI.BattleRiderMountSet.GetMatchingTurretClass(designInfo);
            DialogLoaFleetCompositor.RiderStruct riderStruct1 = this.RiderListMap.FirstOrDefault <DialogLoaFleetCompositor.RiderStruct>((Func <DialogLoaFleetCompositor.RiderStruct, bool>)(x => x.WingData.Any <DialogLoaFleetCompositor.RiderWingStruct>((Func <DialogLoaFleetCompositor.RiderWingStruct, bool>)(j =>
            {
                WeaponEnums.TurretClasses turretClasses = j.wingdata.Class;
                WeaponEnums.TurretClasses?nullable      = turretclass;
                if ((turretClasses != nullable.GetValueOrDefault() ? 0 : (nullable.HasValue ? 1 : 0)) != 0)
                {
                    return(!j.riders.Any <int>());
                }
                return(false);
            }))));
            if (riderStruct1 != null)
            {
                DialogLoaFleetCompositor.RiderWingStruct riderWingStruct = riderStruct1.WingData.First <DialogLoaFleetCompositor.RiderWingStruct>((Func <DialogLoaFleetCompositor.RiderWingStruct, bool>)(x =>
                {
                    WeaponEnums.TurretClasses turretClasses = x.wingdata.Class;
                    WeaponEnums.TurretClasses?nullable      = turretclass;
                    if ((turretClasses != nullable.GetValueOrDefault() ? 0 : (nullable.HasValue ? 1 : 0)) != 0)
                    {
                        return(!x.riders.Any <int>());
                    }
                    return(false);
                }));
                foreach (int slotIndex in riderWingStruct.wingdata.SlotIndexes)
                {
                    riderWingStruct.riders.Add(designid);
                }
                Dictionary <int, int> selectedDesigns;
                int index;
                (selectedDesigns = this.SelectedDesigns)[index = designid] = selectedDesigns[index] + (riderWingStruct.wingdata.SlotIndexes.Count - 1);
            }
            if (this.SelectedClass != RealShipClasses.BattleRider && this.SelectedClass != RealShipClasses.BattleShip && this.SelectedClass != RealShipClasses.BattleCruiser)
            {
                return;
            }
            this.SyncDesignListList(this.SelectedClass);
        }
Example #23
0
        public static IEnumerable <CarrierWingData> GetDesignBattleriderWingData(
            App App,
            DesignInfo des)
        {
            int num1 = 0;
            int num2 = 0;
            List <CarrierWingData> source = new List <CarrierWingData>();

            foreach (DesignSectionInfo designSection in des.DesignSections)
            {
                ShipSectionAsset shipSectionAsset = App.AssetDatabase.GetShipSectionAsset(designSection.FilePath);
                if (shipSectionAsset.Type == ShipSectionType.Mission)
                {
                    int battleRiderType = (int)shipSectionAsset.BattleRiderType;
                }
                num1 += RiderManager.GetNumRiderSlots(App, designSection);
                foreach (LogicalBank bank1 in shipSectionAsset.Banks)
                {
                    LogicalBank bank = bank1;
                    if (RiderManager.IsRiderBank(bank))
                    {
                        List <LogicalMount>       list       = ((IEnumerable <LogicalMount>)shipSectionAsset.Mounts).Where <LogicalMount>((Func <LogicalMount, bool>)(x => x.Bank == bank)).ToList <LogicalMount>();
                        WeaponEnums.TurretClasses mountClass = bank.TurretClass;
                        int count = list.Count;
                        int riderSlotsPerSquad = BattleRiderSquad.GetMinRiderSlotsPerSquad(mountClass, des.Class);
                        int numRidersPerSquad  = BattleRiderSquad.GetNumRidersPerSquad(mountClass, des.Class, Math.Max(count, riderSlotsPerSquad));
                        int num3 = numRidersPerSquad > count ? 1 : count / numRidersPerSquad;
                        for (int index1 = 0; index1 < num3; ++index1)
                        {
                            int        num4    = Math.Min(count, numRidersPerSquad);
                            List <int> intList = new List <int>();
                            for (int index2 = 0; index2 < num4; ++index2)
                            {
                                intList.Add(num2);
                                ++num2;
                            }
                            CarrierWingData carrierWingData = source.FirstOrDefault <CarrierWingData>((Func <CarrierWingData, bool>)(x =>
                            {
                                if (x.Class == mountClass)
                                {
                                    return(x.SlotIndexes.Count < numRidersPerSquad);
                                }
                                return(false);
                            }));
                            if (carrierWingData != null)
                            {
                                carrierWingData.SlotIndexes.AddRange((IEnumerable <int>)intList);
                            }
                            else
                            {
                                source.Add(new CarrierWingData()
                                {
                                    SlotIndexes = intList,
                                    Class       = mountClass
                                });
                            }
                        }
                    }
                    else if (WeaponEnums.IsWeaponBattleRider(bank.TurretClass))
                    {
                        num2 += ((IEnumerable <LogicalMount>)shipSectionAsset.Mounts).Count <LogicalMount>((Func <LogicalMount, bool>)(x => x.Bank == bank));
                    }
                }
                foreach (DesignModuleInfo module in designSection.Modules)
                {
                    string        path          = App.GameDatabase.GetModuleAsset(module.ModuleID);
                    LogicalModule logicalModule = App.AssetDatabase.Modules.FirstOrDefault <LogicalModule>((Func <LogicalModule, bool>)(x => x.ModulePath == path));
                    foreach (LogicalBank bank1 in logicalModule.Banks)
                    {
                        LogicalBank bank = bank1;
                        if (RiderManager.IsRiderBank(bank))
                        {
                            int        count   = ((IEnumerable <LogicalMount>)logicalModule.Mounts).Where <LogicalMount>((Func <LogicalMount, bool>)(x => x.Bank == bank)).ToList <LogicalMount>().Count;
                            List <int> intList = new List <int>();
                            for (int index = 0; index < count; ++index)
                            {
                                intList.Add(num2);
                                ++num2;
                            }
                            source.Add(new CarrierWingData()
                            {
                                SlotIndexes = intList,
                                Class       = bank.TurretClass,
                                DefaultType = logicalModule.AbilityType == ModuleEnums.ModuleAbilities.KingfisherRider ? BattleRiderTypes.scout : BattleRiderTypes.Unspecified
                            });
                        }
                        else if (WeaponEnums.IsWeaponBattleRider(bank.TurretClass))
                        {
                            num2 += ((IEnumerable <LogicalMount>)logicalModule.Mounts).Count <LogicalMount>((Func <LogicalMount, bool>)(x => x.Bank == bank));
                        }
                    }
                }
            }
            return((IEnumerable <CarrierWingData>)source);
        }
        private void RemoveDesign(int designid, bool listid = true)
        {
            int removedinex = 0;

            if (listid)
            {
                removedinex = this.SelectedDesigns[this.ListDesignMap[designid]];
                if (this.SelectedDesigns.ContainsKey(this.ListDesignMap[designid]))
                {
                    Dictionary <int, int> selectedDesigns;
                    int listDesign;
                    (selectedDesigns = this.SelectedDesigns)[listDesign = this.ListDesignMap[designid]] = selectedDesigns[listDesign] - 1;
                }
                designid = this.ListDesignMap[designid];
            }
            else if (this.SelectedDesigns.ContainsKey(designid))
            {
                Dictionary <int, int> selectedDesigns;
                int index;
                (selectedDesigns = this.SelectedDesigns)[index = designid] = selectedDesigns[index] - 1;
            }
            bool flag = false;

            foreach (DialogLoaFleetCompositor.RiderStruct riderStruct in this.RiderListMap.Where <DialogLoaFleetCompositor.RiderStruct>((Func <DialogLoaFleetCompositor.RiderStruct, bool>)(x =>
            {
                if (x.CarrierDesignID == designid)
                {
                    return(x.SelectedDesignCarrierKey == removedinex);
                }
                return(false);
            })))
            {
                flag = true;
                foreach (DialogLoaFleetCompositor.RiderWingStruct riderWingStruct in riderStruct.WingData)
                {
                    using (List <int> .Enumerator enumerator = riderWingStruct.riders.GetEnumerator())
                    {
                        if (enumerator.MoveNext())
                        {
                            this.RemoveDesign(enumerator.Current, false);
                        }
                    }
                }
            }
            if (flag)
            {
                this.RiderListMap.Remove(this.RiderListMap.First <DialogLoaFleetCompositor.RiderStruct>((Func <DialogLoaFleetCompositor.RiderStruct, bool>)(x =>
                {
                    if (x.CarrierDesignID == designid)
                    {
                        return(x.SelectedDesignCarrierKey == removedinex);
                    }
                    return(false);
                })));
            }
            DesignInfo designInfo = this._app.GameDatabase.GetDesignInfo(designid);

            if (designInfo.Class != ShipClass.BattleRider)
            {
                return;
            }
            WeaponEnums.TurretClasses?           turretclass  = StrategicAI.BattleRiderMountSet.GetMatchingTurretClass(designInfo);
            DialogLoaFleetCompositor.RiderStruct riderStruct1 = this.RiderListMap.FirstOrDefault <DialogLoaFleetCompositor.RiderStruct>((Func <DialogLoaFleetCompositor.RiderStruct, bool>)(x => x.WingData.Any <DialogLoaFleetCompositor.RiderWingStruct>((Func <DialogLoaFleetCompositor.RiderWingStruct, bool>)(j =>
            {
                WeaponEnums.TurretClasses turretClasses = j.wingdata.Class;
                WeaponEnums.TurretClasses?nullable      = turretclass;
                if ((turretClasses != nullable.GetValueOrDefault() ? 0 : (nullable.HasValue ? 1 : 0)) != 0)
                {
                    return(j.riders.Any <int>((Func <int, bool>)(k => k == designid)));
                }
                return(false);
            }))));
            if (riderStruct1 != null)
            {
                DialogLoaFleetCompositor.RiderWingStruct riderWingStruct = riderStruct1.WingData.First <DialogLoaFleetCompositor.RiderWingStruct>((Func <DialogLoaFleetCompositor.RiderWingStruct, bool>)(x =>
                {
                    WeaponEnums.TurretClasses turretClasses = x.wingdata.Class;
                    WeaponEnums.TurretClasses?nullable      = turretclass;
                    if ((turretClasses != nullable.GetValueOrDefault() ? 0 : (nullable.HasValue ? 1 : 0)) != 0)
                    {
                        return(x.riders.Any <int>((Func <int, bool>)(k => k == designid)));
                    }
                    return(false);
                }));
                foreach (int slotIndex in riderWingStruct.wingdata.SlotIndexes)
                {
                    riderWingStruct.riders.Remove(designid);
                }
                Dictionary <int, int> selectedDesigns;
                int index;
                (selectedDesigns = this.SelectedDesigns)[index = designid] = selectedDesigns[index] - (riderWingStruct.wingdata.SlotIndexes.Count - 1);
            }
            if (this.SelectedClass != RealShipClasses.BattleRider && this.SelectedClass != RealShipClasses.BattleShip && this.SelectedClass != RealShipClasses.BattleCruiser)
            {
                return;
            }
            this.SyncDesignListList(this.SelectedClass);
        }
Example #25
0
 public static bool IsBattleRider(WeaponEnums.TurretClasses shipType)
 {
     return(((IEnumerable <WeaponEnums.TurretClasses>)WeaponEnums._battleRiderTypes).Contains <WeaponEnums.TurretClasses>(shipType));
 }
Example #26
0
        private void SyncFleet(int fleetID)
        {
            this.App.GameDatabase.GetFleetInfo(fleetID);
            IEnumerable <ShipInfo> shipInfoByFleetId = this.App.GameDatabase.GetShipInfoByFleetID(fleetID, false);
            List <object>          objectList        = new List <object>();
            int num1 = 0;

            foreach (ShipInfo shipInfo in shipInfoByFleetId)
            {
                DesignInfo             designInfo = shipInfo.DesignInfo;
                int                    num2       = 0;
                int                    count1     = objectList.Count;
                BattleRiderTypes       type       = BattleRiderTypes.Unspecified;
                int                    num3       = 0;
                List <CarrierWingData> source     = new List <CarrierWingData>();
                foreach (DesignSectionInfo designSection in designInfo.DesignSections)
                {
                    ShipSectionAsset shipSectionAsset = this.App.AssetDatabase.GetShipSectionAsset(designSection.FilePath);
                    if (shipSectionAsset.Type == ShipSectionType.Mission)
                    {
                        type = shipSectionAsset.BattleRiderType;
                    }
                    num2 += RiderManager.GetNumRiderSlots(this.App, designSection);
                    foreach (LogicalBank bank1 in shipSectionAsset.Banks)
                    {
                        LogicalBank bank = bank1;
                        if (RiderManager.IsRiderBank(bank))
                        {
                            List <LogicalMount>       list       = ((IEnumerable <LogicalMount>)shipSectionAsset.Mounts).Where <LogicalMount>((Func <LogicalMount, bool>)(x => x.Bank == bank)).ToList <LogicalMount>();
                            WeaponEnums.TurretClasses mountClass = bank.TurretClass;
                            int count2             = list.Count;
                            int riderSlotsPerSquad = BattleRiderSquad.GetMinRiderSlotsPerSquad(mountClass, designInfo.Class);
                            int numRidersPerSquad  = BattleRiderSquad.GetNumRidersPerSquad(mountClass, designInfo.Class, Math.Max(count2, riderSlotsPerSquad));
                            int num4 = numRidersPerSquad > count2 ? 1 : count2 / numRidersPerSquad;
                            for (int index1 = 0; index1 < num4; ++index1)
                            {
                                int        num5    = Math.Min(count2, numRidersPerSquad);
                                List <int> intList = new List <int>();
                                for (int index2 = 0; index2 < num5; ++index2)
                                {
                                    intList.Add(num3);
                                    ++num3;
                                }
                                CarrierWingData carrierWingData = source.FirstOrDefault <CarrierWingData>((Func <CarrierWingData, bool>)(x =>
                                {
                                    if (x.Class == mountClass)
                                    {
                                        return(x.SlotIndexes.Count < numRidersPerSquad);
                                    }
                                    return(false);
                                }));
                                if (carrierWingData != null)
                                {
                                    carrierWingData.SlotIndexes.AddRange((IEnumerable <int>)intList);
                                }
                                else
                                {
                                    source.Add(new CarrierWingData()
                                    {
                                        SlotIndexes = intList,
                                        Class       = mountClass
                                    });
                                }
                            }
                            foreach (LogicalMount logicalMount in list)
                            {
                                objectList.Add((object)(int)bank.TurretClass);
                            }
                        }
                        else if (WeaponEnums.IsWeaponBattleRider(bank.TurretClass))
                        {
                            num3 += ((IEnumerable <LogicalMount>)shipSectionAsset.Mounts).Count <LogicalMount>((Func <LogicalMount, bool>)(x => x.Bank == bank));
                        }
                    }
                    foreach (DesignModuleInfo module in designSection.Modules)
                    {
                        string        path          = this.App.GameDatabase.GetModuleAsset(module.ModuleID);
                        LogicalModule logicalModule = this.App.AssetDatabase.Modules.FirstOrDefault <LogicalModule>((Func <LogicalModule, bool>)(x => x.ModulePath == path));
                        foreach (LogicalBank bank1 in logicalModule.Banks)
                        {
                            LogicalBank bank = bank1;
                            if (RiderManager.IsRiderBank(bank))
                            {
                                List <LogicalMount> list = ((IEnumerable <LogicalMount>)logicalModule.Mounts).Where <LogicalMount>((Func <LogicalMount, bool>)(x => x.Bank == bank)).ToList <LogicalMount>();
                                int        count2        = list.Count;
                                List <int> intList       = new List <int>();
                                for (int index = 0; index < count2; ++index)
                                {
                                    intList.Add(num3);
                                    ++num3;
                                }
                                source.Add(new CarrierWingData()
                                {
                                    SlotIndexes = intList,
                                    Class       = bank.TurretClass,
                                    DefaultType = logicalModule.AbilityType == ModuleEnums.ModuleAbilities.KingfisherRider ? BattleRiderTypes.scout : BattleRiderTypes.Unspecified
                                });
                                foreach (LogicalMount logicalMount in list)
                                {
                                    objectList.Add((object)(int)bank.TurretClass);
                                }
                            }
                            else if (WeaponEnums.IsWeaponBattleRider(bank.TurretClass))
                            {
                                num3 += ((IEnumerable <LogicalMount>)logicalModule.Mounts).Count <LogicalMount>((Func <LogicalMount, bool>)(x => x.Bank == bank));
                            }
                        }
                    }
                }
                objectList.Insert(count1, (object)num2);
                int    num6 = 0;
                string str1 = "";
                string str2 = "";
                foreach (DesignSectionInfo designSection in designInfo.DesignSections)
                {
                    ShipSectionAsset shipSectionAsset = designSection.ShipSectionAsset;
                    num6 += shipSectionAsset.ReserveSize;
                    if (shipSectionAsset.Type == ShipSectionType.Mission)
                    {
                        str1 = App.Localize(shipSectionAsset.Title);
                    }
                    if (shipSectionAsset.Type == ShipSectionType.Engine)
                    {
                        str2 = App.Localize(shipSectionAsset.Title);
                    }
                }
                if (num6 > 0 || num2 > 0 || type.IsBattleRiderType())
                {
                    objectList.Add((object)shipInfo.DesignID);
                    objectList.Add((object)shipInfo.ID);
                    objectList.Add((object)designInfo.Name);
                    objectList.Add((object)shipInfo.ShipName);
                    objectList.Add((object)num6);
                    objectList.Add((object)(int)designInfo.Class);
                    objectList.Add((object)(int)type);
                    objectList.Add((object)shipInfo.ParentID);
                    objectList.Add((object)shipInfo.RiderIndex);
                    objectList.Add((object)str1);
                    objectList.Add((object)str2);
                    if (num2 > 0)
                    {
                        objectList.Add((object)source.Count);
                        foreach (CarrierWingData carrierWingData in source)
                        {
                            objectList.Add((object)carrierWingData.SlotIndexes.Count);
                            foreach (int slotIndex in carrierWingData.SlotIndexes)
                            {
                                objectList.Add((object)slotIndex);
                            }
                            objectList.Add((object)(int)carrierWingData.Class);
                            objectList.Add((object)(int)carrierWingData.DefaultType);
                        }
                    }
                    else if (num6 > 0)
                    {
                        objectList.Add((object)0);
                    }
                    ++num1;
                }
                else
                {
                    objectList.RemoveRange(count1, objectList.Count - count1);
                }
            }
            objectList.Insert(0, (object)num1);
            this.PostSetProp("SyncShips", objectList.ToArray());
        }
Example #27
0
 public LogicalTurretClass GetLogicalTurretClassForMount(
     WeaponEnums.WeaponSizes mountTurretSize,
     WeaponEnums.TurretClasses mountTurretClass)
 {
     return(LogicalTurretClass.GetLogicalTurretClassForMount((IEnumerable <LogicalTurretClass>) this.TurretClasses, this.DefaultWeaponSize, this.DefaultWeaponClass, mountTurretSize, mountTurretClass));
 }