private void ThinkWaitForLaunch()
        {
            List <Ship> shipList = new List <Ship>();

            foreach (Ship launchingCrow in this.m_LaunchingCrows)
            {
                if (!launchingCrow.DockedWithParent)
                {
                    shipList.Add(launchingCrow);
                }
            }
            foreach (Ship ship in shipList)
            {
                this.m_LaunchingCrows.Remove(ship);
            }
            if (this.m_LaunchingCrows.Count != 0)
            {
                return;
            }
            if (this.m_LoadingCrows.Count + this.m_SpawnedCrows.Count < this.m_AvailableCrows.Count)
            {
                this.m_State = MorrigiRelicStates.EMITCROW;
            }
            else
            {
                this.m_State = MorrigiRelicStates.IDLE;
            }
        }
        private void SpawnMaxCrows()
        {
            int             num          = Math.Min(Math.Max(this.m_AvailableCrows.Count - (this.m_LoadingCrows.Count + this.m_SpawnedCrows.Count), 0), Math.Max(this.m_MorrigiRelic.BattleRiderMounts.Count <BattleRiderMount>() - this.m_LoadingCrows.Count, 0));
            List <ShipInfo> shipInfoList = new List <ShipInfo>();
            Matrix          rotationYpr  = Matrix.CreateRotationYPR(this.m_MorrigiRelic.Maneuvering.Rotation);

            rotationYpr.Position = this.m_MorrigiRelic.Maneuvering.Position;
            for (int index = 0; index < num; ++index)
            {
                this.m_AvailableCrows[index].RiderIndex = 0;
                Ship ship = Ship.CreateShip(this.m_Game.Game, rotationYpr, this.m_AvailableCrows[index], this.m_MorrigiRelic.ObjectID, this.m_MorrigiRelic.InputID, this.m_MorrigiRelic.Player.ObjectID, false, (IEnumerable <Player>)null);
                if (ship != null)
                {
                    ship.ParentDatabaseID = this.m_AvailableCrows[index].ParentID;
                    ship.Maneuvering.RetreatDestination = this.m_MorrigiRelic.Maneuvering.RetreatDestination;
                    this.m_LoadingCrows.Add(ship);
                }
                shipInfoList.Add(this.m_AvailableCrows[index]);
            }
            foreach (ShipInfo shipInfo in shipInfoList)
            {
                this.m_AvailableCrows.Remove(shipInfo);
            }
            if (this.m_LoadingCrows.Count <= 0)
            {
                return;
            }
            this.m_State = MorrigiRelicStates.INTEGRATECROW;
        }
        private void ThinkIntegrateCrow()
        {
            if (this.m_LoadingCrows.Count <= 0)
            {
                return;
            }
            bool flag = true;

            foreach (GameObject loadingCrow in this.m_LoadingCrows)
            {
                if (loadingCrow.ObjectStatus != GameObjectStatus.Ready)
                {
                    flag = false;
                }
            }
            if (!flag)
            {
                return;
            }
            foreach (Ship loadingCrow in this.m_LoadingCrows)
            {
                loadingCrow.Player = this.m_MorrigiRelic.Player;
                loadingCrow.Active = true;
                this.m_Game.CurrentState.AddGameObject((IGameObject)loadingCrow, false);
            }
            this.m_State = MorrigiRelicStates.WAITFORDOCKED;
        }
 private void ThinkIdle()
 {
     if (this.m_LoadingCrows.Count + this.m_SpawnedCrows.Count >= this.m_AvailableCrows.Count)
     {
         return;
     }
     this.m_State = MorrigiRelicStates.EMITCROW;
 }
 private void ThinkLaunch()
 {
     if (this.m_LaunchingCrows.Count == 0)
     {
         this.m_State = MorrigiRelicStates.IDLE;
     }
     else
     {
         this.m_MorrigiRelic.PostSetProp("LaunchBattleriders");
         this.m_State = MorrigiRelicStates.WAITFORLAUNCH;
     }
 }
        private void ThinkWaitForDocked()
        {
            if (this.m_LoadingCrows.Count > 0)
            {
                return;
            }
            bool flag = true;

            foreach (Ship launchingCrow in this.m_LaunchingCrows)
            {
                if (!launchingCrow.DockedWithParent)
                {
                    flag = false;
                    break;
                }
            }
            if (!flag)
            {
                return;
            }
            this.m_State = MorrigiRelicStates.LAUNCHCROW;
        }
        public override void Initialize()
        {
            this.m_LoadingCrows   = new List <Ship>();
            this.m_LaunchingCrows = new List <Ship>();
            this.m_SpawnedCrows   = new List <MorrigiCrowControl>();
            this.m_State          = MorrigiRelicStates.IDLE;
            this.m_Target         = (IGameObject)null;
            this.m_AvailableCrows = this.m_Game.GameDatabase.GetBattleRidersByParentID(this.m_MorrigiRelic.DatabaseID).ToList <ShipInfo>();
            this.m_MorrigiRelic.PostSetProp("SetAsOnlyLaunchCarrier", true);
            this.m_IsAggressive = false;
            MorrigiRelicInfo morrigiRelicInfo = this.m_Game.GameDatabase.GetMorrigiRelicInfos().ToList <MorrigiRelicInfo>().FirstOrDefault <MorrigiRelicInfo>((Func <MorrigiRelicInfo, bool>)(x => x.FleetId == this.m_FleetId));

            if (morrigiRelicInfo != null)
            {
                this.m_IsAggressive = morrigiRelicInfo.IsAggressive;
            }
            if (!this.m_IsAggressive)
            {
                return;
            }
            this.SpawnMaxCrows();
        }