Exemplo n.º 1
0
        public void UpdateTurn(GameSession game, int id)
        {
            if (game.GameDatabase.GetTurnCount() < game.AssetDatabase.RandomEncMinTurns && !this.ForceVonNeumannAttack && !this.ForceVonNeumannAttackCycle)
            {
                return;
            }
            VonNeumannInfo   vonNeumannInfo = game.GameDatabase.GetVonNeumannInfo(id);
            bool             flag           = vonNeumannInfo == null || this.HomeWorldSystemId <= 0;
            List <FleetInfo> list           = game.GameDatabase.GetFleetInfosByPlayerID(this.PlayerID, FleetType.FL_NORMAL).ToList <FleetInfo>();

            if (flag || list.FirstOrDefault <FleetInfo>((Func <FleetInfo, bool>)(x => x.Name == "Von Neumann NeoBerserker")) == null)
            {
                foreach (FleetInfo fleetInfo in list)
                {
                    game.GameDatabase.RemoveFleet(fleetInfo.ID);
                }
                game.GameDatabase.RemoveEncounter(id);
            }
            else
            {
                vonNeumannInfo.Resources += vonNeumannInfo.ResourcesCollectedLastTurn;
                vonNeumannInfo.ResourcesCollectedLastTurn = 0;
                if (vonNeumannInfo.ProjectDesignId.HasValue)
                {
                    this.BuildProject(game, ref vonNeumannInfo);
                }
                this.ProcessTargets(game, ref vonNeumannInfo);
                this.SendCollector(game, ref vonNeumannInfo, this.ForceVonNeumannAttack);
                game.GameDatabase.UpdateVonNeumannInfo(vonNeumannInfo);
            }
        }
Exemplo n.º 2
0
        public static void HandleMomRetreated(GameSession game, int id, int ru)
        {
            VonNeumannInfo vonNeumannInfo = game.GameDatabase.GetVonNeumannInfo(id);

            if (vonNeumannInfo == null)
            {
                return;
            }
            vonNeumannInfo.Resources += ru;
            game.GameDatabase.UpdateVonNeumannInfo(vonNeumannInfo);
        }
Exemplo n.º 3
0
        private void BuildProject(GameSession game, ref VonNeumannInfo vi)
        {
            int        num        = Math.Min(game.AssetDatabase.GlobalVonNeumannData.BuildRate, (int)((double)vi.Resources * (double)game.AssetDatabase.DefaultStratModifiers[StratModifiers.OverharvestModifier]));
            DesignInfo designInfo = game.GameDatabase.GetDesignInfo(vi.ProjectDesignId.Value);

            if (vi.ConstructionProgress + num > designInfo.ProductionCost || this.ForceVonNeumannAttackCycle)
            {
                vi.Resources -= (int)((double)(designInfo.ProductionCost - vi.ConstructionProgress) / (double)game.AssetDatabase.DefaultStratModifiers[StratModifiers.OverharvestModifier]);
                string name             = "";
                int?   projectDesignId1 = vi.ProjectDesignId;
                int    designId1        = VonNeumann.StaticShipDesigns[VonNeumann.VonNeumannShipDesigns.SeekerMothership].DesignId;
                if ((projectDesignId1.GetValueOrDefault() != designId1 ? 0 : (projectDesignId1.HasValue ? 1 : 0)) != 0)
                {
                    name = "Von Neumann Seeker";
                }
                else
                {
                    int?projectDesignId2 = vi.ProjectDesignId;
                    int designId2        = VonNeumann.StaticShipDesigns[VonNeumann.VonNeumannShipDesigns.BerserkerMothership].DesignId;
                    if ((projectDesignId2.GetValueOrDefault() != designId2 ? 0 : (projectDesignId2.HasValue ? 1 : 0)) != 0)
                    {
                        name = "Von Neumann Berserker";
                    }
                    else
                    {
                        int?projectDesignId3 = vi.ProjectDesignId;
                        int designId3        = VonNeumann.StaticShipDesigns[VonNeumann.VonNeumannShipDesigns.PlanetKiller].DesignId;
                        if ((projectDesignId3.GetValueOrDefault() != designId3 ? 0 : (projectDesignId3.HasValue ? 1 : 0)) != 0)
                        {
                            name = "Von Neumann System Killer";
                        }
                    }
                }
                int fleetID = game.GameDatabase.InsertFleet(this.PlayerId, 0, vi.SystemId, vi.SystemId, name, FleetType.FL_NORMAL);
                game.GameDatabase.InsertShip(fleetID, vi.ProjectDesignId.Value, null, (ShipParams)0, new int?(), 0);
                vi.ConstructionProgress = 0;
                vi.ProjectDesignId      = new int?();
            }
            else
            {
                vi.Resources            -= (int)((double)game.AssetDatabase.GlobalVonNeumannData.BuildRate / (double)game.AssetDatabase.DefaultStratModifiers[StratModifiers.OverharvestModifier]);
                vi.ConstructionProgress += num;
            }
        }
Exemplo n.º 4
0
        public void HandleHomeSystemDefeated(App app, FleetInfo fi, List <int> attackingPlayers)
        {
            VonNeumannInfo vonNeumannInfo = app.Game.GameDatabase.GetVonNeumannInfos().FirstOrDefault <VonNeumannInfo>((Func <VonNeumannInfo, bool>)(x =>
            {
                int?fleetId = x.FleetId;
                int id      = fi.ID;
                if (fleetId.GetValueOrDefault() == id)
                {
                    return(fleetId.HasValue);
                }
                return(false);
            }));

            if (vonNeumannInfo == null)
            {
                return;
            }
            foreach (int attackingPlayer in attackingPlayers)
            {
                float stratModifier = app.GameDatabase.GetStratModifier <float>(StratModifiers.ResearchModifier, attackingPlayer);
                app.GameDatabase.SetStratModifier(StratModifiers.ResearchModifier, attackingPlayer, (object)(float)((double)stratModifier + 0.0500000007450581));
                app.GameDatabase.InsertTurnEvent(new TurnEvent()
                {
                    EventType    = TurnEventType.EV_VN_HW_DEFEATED,
                    EventMessage = TurnEventMessage.EM_VN_HW_DEFEATED,
                    PlayerID     = attackingPlayer,
                    TurnNumber   = app.GameDatabase.GetTurnCount(),
                    ShowsDialog  = true
                });
            }
            foreach (FleetInfo fleetInfo in app.GameDatabase.GetFleetInfosByPlayerID(this.PlayerId, FleetType.FL_NORMAL).ToList <FleetInfo>())
            {
                app.GameDatabase.RemoveFleet(fleetInfo.ID);
            }
            app.GameDatabase.RemoveEncounter(vonNeumannInfo.Id);
        }
Exemplo n.º 5
0
        public void SendCollector(GameSession game, ref VonNeumannInfo vi, bool forceHomeworldAttack = false)
        {
            List <FleetInfo>     list = game.GameDatabase.GetFleetInfosByPlayerID(this.PlayerId, FleetType.FL_NORMAL).ToList <FleetInfo>();
            VonNeumannGlobalData globalVonNeumannData = game.AssetDatabase.GlobalVonNeumannData;
            FleetInfo            fleetInfo            = VonNeumann.GetCollectorFleetInfo(list);

            if (fleetInfo == null)
            {
                DesignInfo designInfo = game.GameDatabase.GetDesignInfo(VonNeumann.StaticShipDesigns[VonNeumann.VonNeumannShipDesigns.CollectorMothership].DesignId);
                if ((double)vi.Resources > (double)designInfo.ProductionCost / (double)game.AssetDatabase.DefaultStratModifiers[StratModifiers.OverharvestModifier])
                {
                    vi.Resources -= (int)((double)designInfo.ProductionCost / (double)game.AssetDatabase.DefaultStratModifiers[StratModifiers.OverharvestModifier]);
                    vi.FleetId    = new int?(game.GameDatabase.InsertFleet(this.PlayerId, 0, vi.SystemId, vi.SystemId, "Von Neumann Collector", FleetType.FL_NORMAL));
                    game.GameDatabase.InsertShip(vi.FleetId.Value, VonNeumann.StaticShipDesigns[VonNeumann.VonNeumannShipDesigns.CollectorMothership].DesignId, null, (ShipParams)0, new int?(), 0);
                    fleetInfo = game.GameDatabase.GetFleetInfo(vi.FleetId.Value);
                }
                else
                {
                    vi.Resources = 0;
                    vi.FleetId   = new int?(game.GameDatabase.InsertFleet(this.PlayerId, 0, vi.SystemId, vi.SystemId, "Von Neumann Collector", FleetType.FL_NORMAL));
                    game.GameDatabase.InsertShip(vi.FleetId.Value, VonNeumann.StaticShipDesigns[VonNeumann.VonNeumannShipDesigns.CollectorMothership].DesignId, null, (ShipParams)0, new int?(), 0);
                    fleetInfo = game.GameDatabase.GetFleetInfo(vi.FleetId.Value);
                }
                int sysId = vi.LastCollectionSystem;
                if (!vi.TargetInfos.Any <VonNeumannTargetInfo>((Func <VonNeumannTargetInfo, bool>)(x => x.SystemId == sysId)) && sysId != 0)
                {
                    vi.TargetInfos.Add(new VonNeumannTargetInfo()
                    {
                        SystemId    = sysId,
                        ThreatLevel = 1
                    });
                }
            }
            else if (vi.LastCollectionSystem != 0)
            {
                foreach (int num1 in game.GameDatabase.GetStarSystemOrbitalObjectIDs(fleetInfo.SystemID).ToList <int>())
                {
                    PlanetInfo        planetInfo        = game.GameDatabase.GetPlanetInfo(num1);
                    LargeAsteroidInfo largeAsteroidInfo = game.GameDatabase.GetLargeAsteroidInfo(num1);
                    int num2 = globalVonNeumannData.SalvageCapacity - vi.ResourcesCollectedLastTurn;
                    if (planetInfo != null)
                    {
                        if (planetInfo.Resources > num2)
                        {
                            planetInfo.Resources         -= num2;
                            vi.ResourcesCollectedLastTurn = globalVonNeumannData.SalvageCapacity;
                            break;
                        }
                        vi.ResourcesCollectedLastTurn += planetInfo.Resources;
                        planetInfo.Resources           = 0;
                        game.GameDatabase.UpdatePlanet(planetInfo);
                    }
                    else if (largeAsteroidInfo != null)
                    {
                        if (largeAsteroidInfo.Resources > num2)
                        {
                            largeAsteroidInfo.Resources  -= num2;
                            vi.ResourcesCollectedLastTurn = globalVonNeumannData.SalvageCapacity;
                            break;
                        }
                        vi.ResourcesCollectedLastTurn += largeAsteroidInfo.Resources;
                        largeAsteroidInfo.Resources    = 0;
                        game.GameDatabase.UpdateLargeAsteroidInfo(largeAsteroidInfo);
                    }
                }
                vi.Resources      += vi.ResourcesCollectedLastTurn;
                fleetInfo.SystemID = vi.SystemId;
                game.GameDatabase.UpdateFleetLocation(fleetInfo.ID, fleetInfo.SystemID, new int?());
            }
            vi.LastCollectionSystem = 0;
            int turnCount = game.GameDatabase.GetTurnCount();

            if (fleetInfo == null || turnCount <= vi.LastCollectionTurn + globalVonNeumannData.SalvageCycle && !forceHomeworldAttack && !this.ForceVonNeumannAttackCycle)
            {
                return;
            }
            vi.LastCollectionTurn = turnCount;
            List <int> intList = new List <int>();

            foreach (int num in game.GameDatabase.GetStarSystemIDs().ToList <int>())
            {
                int system = num;
                if (!vi.TargetInfos.Any <VonNeumannTargetInfo>((Func <VonNeumannTargetInfo, bool>)(x => x.SystemId == system)))
                {
                    int?systemOwningPlayer = game.GameDatabase.GetSystemOwningPlayer(system);
                    if (systemOwningPlayer.HasValue)
                    {
                        Player playerObject = game.GetPlayerObject(systemOwningPlayer.Value);
                        if (playerObject == null || playerObject.IsAI())
                        {
                            continue;
                        }
                    }
                    intList.Add(system);
                }
            }
            if (intList.Count <= 0)
            {
                return;
            }
            fleetInfo.SystemID      = forceHomeworldAttack || this.ForceVonNeumannAttackCycle ? game.GameDatabase.GetOrbitalObjectInfo(game.GameDatabase.GetPlayerInfo(game.LocalPlayer.ID).Homeworld.Value).StarSystemID : intList[App.GetSafeRandom().Next(intList.Count)];
            vi.FleetId              = new int?(fleetInfo.ID);
            vi.LastCollectionSystem = fleetInfo.SystemID;
            game.GameDatabase.UpdateFleetLocation(fleetInfo.ID, fleetInfo.SystemID, new int?());
        }
Exemplo n.º 6
0
        private void ProcessTargets(GameSession game, ref VonNeumannInfo vi)
        {
            List <FleetInfo> list                  = game.GameDatabase.GetFleetInfosByPlayerID(this.PlayerId, FleetType.FL_NORMAL).ToList <FleetInfo>();
            FleetInfo        seekerFleetInfo       = VonNeumann.GetSeekerFleetInfo(list);
            FleetInfo        berserkerFleetInfo    = VonNeumann.GetBerserkerFleetInfo(list);
            FleetInfo        systemKillerFleetInfo = VonNeumann.GetSystemKillerFleetInfo(list);
            int lastTargetSystem = vi.LastTargetSystem;
            VonNeumannTargetInfo neumannTargetInfo1 = vi.TargetInfos.FirstOrDefault <VonNeumannTargetInfo>((Func <VonNeumannTargetInfo, bool>)(x => x.SystemId == lastTargetSystem));

            if (neumannTargetInfo1 != null)
            {
                FleetInfo fleetInfo = (FleetInfo)null;
                switch (neumannTargetInfo1.ThreatLevel)
                {
                case 1:
                    fleetInfo = seekerFleetInfo;
                    break;

                case 2:
                    fleetInfo = berserkerFleetInfo;
                    break;

                case 3:
                    fleetInfo = systemKillerFleetInfo;
                    break;
                }
                if (fleetInfo == null)
                {
                    if (neumannTargetInfo1.ThreatLevel < 3)
                    {
                        ++neumannTargetInfo1.ThreatLevel;
                    }
                }
                else
                {
                    vi.TargetInfos.Remove(neumannTargetInfo1);
                    game.GameDatabase.RemoveVonNeumannTargetInfo(vi.Id, neumannTargetInfo1.SystemId);
                    fleetInfo.SystemID = vi.SystemId;
                    game.GameDatabase.UpdateFleetLocation(fleetInfo.ID, fleetInfo.SystemID, new int?());
                    vi.FleetId = new int?(fleetInfo.ID);
                }
            }
            vi.LastTargetSystem = 0;
            int turnCount = game.GameDatabase.GetTurnCount();

            if (turnCount <= vi.LastTargetTurn + game.AssetDatabase.GlobalVonNeumannData.TargetCycle && !this.ForceVonNeumannAttackCycle)
            {
                return;
            }
            vi.LastTargetTurn = turnCount;
            VonNeumannTargetInfo neumannTargetInfo2 = vi.TargetInfos.FirstOrDefault <VonNeumannTargetInfo>();

            if (neumannTargetInfo2 == null)
            {
                return;
            }
            switch (neumannTargetInfo2.ThreatLevel)
            {
            case 1:
                if (seekerFleetInfo != null)
                {
                    seekerFleetInfo.SystemID = neumannTargetInfo2.SystemId;
                    vi.LastTargetSystem      = neumannTargetInfo2.SystemId;
                    game.GameDatabase.UpdateFleetLocation(seekerFleetInfo.ID, seekerFleetInfo.SystemID, new int?());
                    vi.FleetId = new int?(seekerFleetInfo.ID);
                    break;
                }
                if (vi.ProjectDesignId.HasValue)
                {
                    break;
                }
                vi.ProjectDesignId = new int?(VonNeumann.StaticShipDesigns[VonNeumann.VonNeumannShipDesigns.SeekerMothership].DesignId);
                break;

            case 2:
                if (berserkerFleetInfo != null)
                {
                    berserkerFleetInfo.SystemID = neumannTargetInfo2.SystemId;
                    vi.LastTargetSystem         = neumannTargetInfo2.SystemId;
                    game.GameDatabase.UpdateFleetLocation(berserkerFleetInfo.ID, berserkerFleetInfo.SystemID, new int?());
                    vi.FleetId = new int?(berserkerFleetInfo.ID);
                    break;
                }
                if (vi.ProjectDesignId.HasValue)
                {
                    break;
                }
                vi.ProjectDesignId = new int?(VonNeumann.StaticShipDesigns[VonNeumann.VonNeumannShipDesigns.BerserkerMothership].DesignId);
                break;

            case 3:
                if (systemKillerFleetInfo != null)
                {
                    systemKillerFleetInfo.SystemID = neumannTargetInfo2.SystemId;
                    vi.LastTargetSystem            = neumannTargetInfo2.SystemId;
                    game.GameDatabase.UpdateFleetLocation(systemKillerFleetInfo.ID, systemKillerFleetInfo.SystemID, new int?());
                    vi.FleetId = new int?(systemKillerFleetInfo.ID);
                    break;
                }
                if (vi.ProjectDesignId.HasValue)
                {
                    break;
                }
                vi.ProjectDesignId = new int?(VonNeumann.StaticShipDesigns[VonNeumann.VonNeumannShipDesigns.PlanetKiller].DesignId);
                break;
            }
        }
Exemplo n.º 7
0
        public void AddInstance(GameDatabase gamedb, AssetDatabase assetdb, NamesPool namesPool)
        {
            if (this.NumInstances >= VonNeumann.MaxVonNeumanns)
            {
                return;
            }
            int val1 = this._outlyingStars.Count <KeyValuePair <StarSystemInfo, Vector3> >();

            if (val1 == 0)
            {
                return;
            }
            Random safeRandom = App.GetSafeRandom();
            int    val2       = 5;
            float  num1       = 5f;
            KeyValuePair <StarSystemInfo, Vector3> outlyingStar = this._outlyingStars[safeRandom.Next(Math.Min(val1, val2))];

            this._outlyingStars.Remove(outlyingStar);
            Vector3 origin = outlyingStar.Key.Origin + Vector3.Normalize(outlyingStar.Value) * num1;

            App.Log.Trace(string.Format("Found von neumann homeworld target - Picked System = {0}   Target Coords = {1}", (object)outlyingStar.Key.Name, (object)origin), "game");
            StellarClass stellarClass = StarHelper.ChooseStellarClass(safeRandom);

            this.HomeWorldSystemId = gamedb.InsertStarSystem(new int?(), namesPool.GetSystemName(), new int?(), stellarClass.ToString(), origin, false, true, new int?());
            gamedb.GetStarSystemInfo(this.HomeWorldSystemId);
            int         num2          = 5;
            float       starOrbitStep = StarSystemVars.Instance.StarOrbitStep;
            float       num3          = StarHelper.CalcRadius(stellarClass.Size) + (float)num2 * ((float)num2 * 0.1f * starOrbitStep);
            float       x             = Ellipse.CalcSemiMinorAxis(num3, 0.0f);
            OrbitalPath path          = new OrbitalPath();

            path.Scale             = new Vector2(x, num3);
            path.InitialAngle      = 0.0f;
            this.HomeWorldPlanetId = gamedb.InsertPlanet(new int?(), this.HomeWorldSystemId, path, "VonNeumonia", "normal", new int?(), 0.0f, 0, 0, 5f);
            PlanetInfo planetInfo = gamedb.GetPlanetInfo(this.HomeWorldPlanetId);

            path              = new OrbitalPath();
            path.Scale        = new Vector2(15f, 15f);
            path.Rotation     = new Vector3(0.0f, 0.0f, 0.0f);
            path.DeltaAngle   = 10f;
            path.InitialAngle = 10f;
            VonNeumannInfo vi = new VonNeumannInfo()
            {
                SystemId             = this.HomeWorldSystemId,
                OrbitalId            = this.HomeWorldPlanetId,
                Resources            = assetdb.GlobalVonNeumannData.StartingResources,
                ConstructionProgress = 0
            };
            float radius = StarSystemVars.Instance.SizeToRadius(planetInfo.Size);

            vi.FleetId = new int?(gamedb.InsertFleet(this.PlayerId, 0, vi.SystemId, vi.SystemId, "Von Neumann NeoBerserker", FleetType.FL_NORMAL));
            float  num4    = radius + 2000f;
            float  num5    = 1000f;
            Matrix matrix1 = gamedb.GetOrbitalTransform(this.HomeWorldPlanetId);

            matrix1 = Matrix.CreateWorld(matrix1.Position, Vector3.Normalize(matrix1.Position), Vector3.UnitY);
            Matrix matrix2 = matrix1;

            matrix2.Position = matrix2.Position + matrix2.Forward * num4 - matrix2.Right * num5;
            for (int index = 0; index < 3; ++index)
            {
                int shipID = gamedb.InsertShip(vi.FleetId.Value, VonNeumann.StaticShipDesigns[VonNeumann.VonNeumannShipDesigns.NeoBerserker].DesignId, null, (ShipParams)0, new int?(), 0);
                gamedb.UpdateShipSystemPosition(shipID, new Matrix?(matrix2));
                matrix2.Position += matrix2.Right * num5;
            }
            Random random     = new Random();
            float  radians1   = (float)((random.CoinToss(0.5) ? -1.0 : 1.0) * 0.785398185253143);
            float  radians2   = random.NextInclusive(0.0f, 6.283185f);
            Matrix rotationY1 = Matrix.CreateRotationY(radians1);
            Matrix rotationY2 = Matrix.CreateRotationY(radians2);
            Matrix world      = Matrix.CreateWorld(rotationY1.Forward * (matrix1.Position.Length * 0.75f), rotationY2.Forward, Vector3.UnitY);

            VonNeumann.VonNeumannShipDesigns index1 = (VonNeumann.VonNeumannShipDesigns)random.NextInclusive(21, 23);
            int shipID1 = gamedb.InsertShip(vi.FleetId.Value, VonNeumann.StaticShipDesigns[index1].DesignId, null, (ShipParams)0, new int?(), 0);

            gamedb.UpdateShipSystemPosition(shipID1, new Matrix?(world));
            world.Position -= world.Right * 1000f;
            int shipID2 = gamedb.InsertShip(vi.FleetId.Value, VonNeumann.StaticShipDesigns[VonNeumann.VonNeumannShipDesigns.Moon].DesignId, null, (ShipParams)0, new int?(), 0);

            gamedb.UpdateShipSystemPosition(shipID2, new Matrix?(world));
            world = Matrix.CreateWorld(world.Position + world.Right * 1000f * 2f, -world.Forward, Vector3.UnitY);
            int shipID3 = gamedb.InsertShip(vi.FleetId.Value, VonNeumann.StaticShipDesigns[VonNeumann.VonNeumannShipDesigns.Moon].DesignId, null, (ShipParams)0, new int?(), 0);

            gamedb.UpdateShipSystemPosition(shipID3, new Matrix?(world));
            gamedb.InsertVonNeumannInfo(vi);
            ++this.NumInstances;
        }
Exemplo n.º 8
0
        public override void Initialize()
        {
            this.m_LoadingMom              = (Ship)null;
            this.m_LoadingChilds           = new List <Ship>();
            this.m_SpawnedChilds           = new List <VonNeumannChildControl>();
            this.m_SpawnedMoms             = new List <VonNeumannMomControl>();
            this.m_SpawnLocations          = new List <VonNeumannChildSpawnLocations>();
            this.m_SpawnedDefensePlatforms = new List <Ship>();
            this.m_SpawnedEnemies          = new List <Ship>();
            this.m_State  = VonNeumannMomStates.COLLECT;
            this.m_Orders = VonNeumannOrders.COLLECT;
            this.m_NumChildrenToMaintain = 10;
            this.m_Vanished      = false;
            this.m_TryFindParent = true;
            this.m_VonNeumannID  = 0;
            VonNeumannInfo vonNeumannInfo = this.m_Game.GameDatabase.GetVonNeumannInfos().ToList <VonNeumannInfo>().FirstOrDefault <VonNeumannInfo>((Func <VonNeumannInfo, bool>)(x =>
            {
                int?fleetId1 = x.FleetId;
                int fleetId2 = this.m_FleetID;
                if (fleetId1.GetValueOrDefault() == fleetId2)
                {
                    return(fleetId1.HasValue);
                }
                return(false);
            }));

            if (vonNeumannInfo != null)
            {
                this.m_VonNeumannID = vonNeumannInfo.Id;
            }
            Matrix rotationYpr = Matrix.CreateRotationYPR(this.m_VonNeumannMom.Maneuvering.Rotation);

            rotationYpr.Position = this.m_VonNeumannMom.Maneuvering.Position + rotationYpr.Forward * 500f;
            Vector3 right               = rotationYpr.Right;
            int     designId            = VonNeumann.StaticShipDesigns[VonNeumann.VonNeumannShipDesigns.CollectorProbe].DesignId;
            int     childrenToMaintain1 = this.m_NumChildrenToMaintain;
            float   radians             = MathHelper.DegreesToRadians(360f / (float)childrenToMaintain1);
            float   num1 = radians * 0.5f;
            float   num2 = 1f;

            for (int index = 0; index < childrenToMaintain1; ++index)
            {
                float num3 = radians * (float)((index % childrenToMaintain1 + 1) / 2) * num2 + num1;
                this.m_SpawnLocations.Add(new VonNeumannChildSpawnLocations(this.m_VonNeumannMom, new Vector3((float)Math.Sin((double)num3), 0.0f, -(float)Math.Cos((double)num3)), 300f));
                num2 *= -1f;
            }
            int childrenToMaintain2 = this.m_Game.AssetDatabase.GlobalVonNeumannData.MinChildrenToMaintain;

            for (int index = 0; index < childrenToMaintain2; ++index)
            {
                VonNeumannChildSpawnLocations childSpawnLocations = this.m_SpawnLocations.FirstOrDefault <VonNeumannChildSpawnLocations>((Func <VonNeumannChildSpawnLocations, bool>)(x => x.CanSpawnAtLocation()));
                if (childSpawnLocations != null)
                {
                    Matrix worldMat = rotationYpr;
                    worldMat.Position = childSpawnLocations.GetSpawnLocation();
                    Ship newShip = CombatAIController.CreateNewShip(this.m_Game.Game, worldMat, designId, 0, this.m_VonNeumannMom.InputID, this.m_VonNeumannMom.Player.ObjectID);
                    if (newShip != null)
                    {
                        this.m_LoadingChilds.Add(newShip);
                        childSpawnLocations.SpawnAtLocation(newShip);
                    }
                }
            }
            if (this.m_LoadingChilds.Count <= 0)
            {
                return;
            }
            this.m_State = VonNeumannMomStates.INTEGRATECHILD;
        }