public override void Initialize() { this.m_LoadingSwarmers = new List <Ship>(); this.m_LoadingGuardians = new List <Ship>(); this.m_LaunchingShips = new List <Ship>(); this.m_AttackingPlanetSwarmers = new List <int>(); this.m_AttackingPlanetGardians = new List <int>(); this.m_SpawnedSwarmers = new List <SwarmerAttackerControl>(); this.m_SpawnedGuardians = new List <SwarmerAttackerControl>(); this.m_TargetList = new List <SwarmerTarget>(); this.m_State = SwarmerSpawnerStates.IDLE; this.m_UpdateTargetList = false; this.m_MaxSwarmers = 30; this.m_MaxGuardians = 5; this.m_NumSwarmersToAttackPlanet = 0; this.m_NumGardiansToAttackPlanet = 0; if (this.m_Game.Game.ScriptModules != null && this.m_Game.Game.ScriptModules.Swarmers != null) { if (this.m_SwarmerSpawner.DesignID == this.m_Game.Game.ScriptModules.Swarmers.SwarmQueenDesignID) { this.m_MaxSwarmers = this.m_Game.AssetDatabase.GlobalSwarmerData.NumQueenSwarmers; this.m_MaxGuardians = this.m_Game.AssetDatabase.GlobalSwarmerData.NumQueenGuardians; this.m_NumSwarmersToAttackPlanet = this.m_MaxSwarmers / 2; this.m_NumGardiansToAttackPlanet = this.m_MaxGuardians / 2; } else { this.m_MaxSwarmers = this.m_Game.AssetDatabase.GlobalSwarmerData.NumHiveSwarmers; this.m_MaxGuardians = this.m_Game.AssetDatabase.GlobalSwarmerData.NumHiveGuardians; } } this.m_MaxToCreate = this.m_MaxSwarmers + this.m_MaxGuardians; this.m_UpdateListDelay = 0; this.m_SwarmerSpawner.PostSetProp("SetAsOnlyLaunchCarrier", true); }
protected virtual void ThinkLaunch() { if (this.m_LaunchingShips.Count == 0) { this.m_State = SwarmerSpawnerStates.IDLE; } else { bool flag = true; foreach (Ship launchingShip in this.m_LaunchingShips) { if (!launchingShip.DockedWithParent) { flag = false; break; } } if (!flag) { return; } this.m_SwarmerSpawner.PostSetProp("LaunchBattleriders"); this.m_State = SwarmerSpawnerStates.WAITFORLAUNCH; } }
protected void MaintainMaxSwarmers() { if (!this.ReadyToEmitFighters() || this.m_MaxToCreate <= 0 || this.m_LoadingSwarmers.Count + this.m_LoadingGuardians.Count + (this.m_SpawnedSwarmers.Count + this.m_SpawnedGuardians.Count) >= this.m_MaxSwarmers + this.m_MaxGuardians) { return; } this.m_State = SwarmerSpawnerStates.EMITSWARMER; }
protected virtual void ThinkEmitAttackSwarmer() { if (this.m_MaxToCreate > 0 && this.m_Game.Game.ScriptModules.Swarmers != null) { this.SpawnMaxSwarmerAttackers(this.m_Game.Game.ScriptModules.Swarmers); } else { this.m_State = SwarmerSpawnerStates.IDLE; } }
protected virtual void ThinkAddingSwarmers() { if (this.m_LoadingSwarmers.Count + this.m_LoadingGuardians.Count != 0) { return; } if (this.m_TargetList.Count == 0) { this.m_State = SwarmerSpawnerStates.IDLE; } else { this.m_State = SwarmerSpawnerStates.LAUNCHSWARMER; } }
protected virtual void ThinkIntegrateAttackSwarmer() { if (this.m_LoadingSwarmers.Count + this.m_LoadingGuardians.Count == 0) { this.m_State = SwarmerSpawnerStates.IDLE; } else { bool flag = true; foreach (GameObject loadingSwarmer in this.m_LoadingSwarmers) { if (loadingSwarmer.ObjectStatus != GameObjectStatus.Ready) { flag = false; } } foreach (GameObject loadingGuardian in this.m_LoadingGuardians) { if (loadingGuardian.ObjectStatus != GameObjectStatus.Ready) { flag = false; } } if (!flag) { return; } foreach (Ship loadingSwarmer in this.m_LoadingSwarmers) { loadingSwarmer.Player = this.m_SwarmerSpawner.Player; loadingSwarmer.Active = true; this.m_Game.CurrentState.AddGameObject((IGameObject)loadingSwarmer, false); } foreach (Ship loadingGuardian in this.m_LoadingGuardians) { loadingGuardian.Player = this.m_SwarmerSpawner.Player; loadingGuardian.Active = true; this.m_Game.CurrentState.AddGameObject((IGameObject)loadingGuardian, false); } this.m_State = SwarmerSpawnerStates.ADDINGSWARMERS; } }
protected virtual void ThinkWaitForLaunch() { List <Ship> shipList = new List <Ship>(); foreach (Ship launchingShip in this.m_LaunchingShips) { if (!launchingShip.DockedWithParent) { shipList.Add(launchingShip); } } foreach (Ship ship in shipList) { this.m_LaunchingShips.Remove(ship); } if (this.m_LaunchingShips.Count != 0) { return; } this.m_State = SwarmerSpawnerStates.IDLE; }
private void SpawnMaxSwarmerAttackers(Swarmers swarmers) { if (this.m_MaxToCreate <= 0) { return; } Matrix rotationYpr = Matrix.CreateRotationYPR(this.m_SwarmerSpawner.Maneuvering.Rotation); rotationYpr.Position = this.m_SwarmerSpawner.Maneuvering.Position; int num1 = Math.Max(this.m_SwarmerSpawner.BattleRiderMounts.Count <BattleRiderMount>() - (this.m_LoadingSwarmers.Count + this.m_LoadingGuardians.Count + this.m_LaunchingShips.Count), 0); if (num1 == 0) { return; } int val2_1 = Math.Max(this.m_MaxSwarmers - (this.m_LoadingSwarmers.Count + this.m_SpawnedSwarmers.Count), 0); int val2_2 = Math.Max(this.m_MaxGuardians - (this.m_LoadingGuardians.Count + this.m_SpawnedGuardians.Count), 0); if (val2_1 + val2_2 == 0) { return; } int num2 = Math.Min(num1 / 2, val2_1); int num3 = Math.Min(num1 - num2, val2_2); int num4 = Math.Min(num2 + Math.Max(num1 - (num2 + num3), 0), val2_1); int num5 = num4 + num3; for (int index = 0; index < num5; ++index) { int designId; if (num4 > 0 && (index % 2 == 0 || num3 == 0)) { designId = swarmers.SwarmerDesignID; --num4; } else if (num3 > 0) { designId = swarmers.GuardianDesignID; --num3; } else { break; } Ship newShip = CombatAIController.CreateNewShip(this.m_Game.Game, rotationYpr, designId, this.m_SwarmerSpawner.ObjectID, this.m_SwarmerSpawner.InputID, this.m_SwarmerSpawner.Player.ObjectID); if (newShip != null) { if (designId == swarmers.GuardianDesignID) { this.m_LoadingGuardians.Add(newShip); } else { this.m_LoadingSwarmers.Add(newShip); } --this.m_MaxToCreate; } if (this.m_MaxToCreate <= 0) { break; } } if (this.m_LoadingSwarmers.Count <= 0 && this.m_LoadingGuardians.Count <= 0) { return; } this.m_State = SwarmerSpawnerStates.INTEGRATESWARMER; }