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)); }
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); } }
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; }
public static bool DesignIsSelectable(WeaponEnums.TurretClasses turretClass) { switch (turretClass) { case WeaponEnums.TurretClasses.Drone: case WeaponEnums.TurretClasses.AssaultShuttle: return(true); default: return(false); } }
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); }
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); } }
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); } } }
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); }
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); }
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; }
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); } }
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; }
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; }
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); }
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; }
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; }
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); }
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); }
public static bool IsBattleRider(WeaponEnums.TurretClasses shipType) { return(((IEnumerable <WeaponEnums.TurretClasses>)WeaponEnums._battleRiderTypes).Contains <WeaponEnums.TurretClasses>(shipType)); }
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()); }
public LogicalTurretClass GetLogicalTurretClassForMount( WeaponEnums.WeaponSizes mountTurretSize, WeaponEnums.TurretClasses mountTurretClass) { return(LogicalTurretClass.GetLogicalTurretClassForMount((IEnumerable <LogicalTurretClass>) this.TurretClasses, this.DefaultWeaponSize, this.DefaultWeaponClass, mountTurretSize, mountTurretClass)); }