Пример #1
0
 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);
 }
Пример #2
0
 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;
     }
 }
Пример #3
0
 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;
 }
Пример #4
0
 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;
     }
 }
Пример #5
0
 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;
     }
 }
Пример #6
0
 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;
     }
 }
Пример #7
0
        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;
        }
Пример #8
0
        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;
        }