Example #1
0
        public void AddInstance(GameDatabase gamedb, AssetDatabase assetdb, int SystemId, int OrbitId)
        {
            int num1 = OrbitId;

            if (gamedb.GetLargeAsteroidInfo(OrbitId) == null && gamedb.GetAsteroidBeltInfo(OrbitId) == null)
            {
                OrbitalObjectInfo orbitalObjectInfo = gamedb.GetOrbitalObjectInfo(OrbitId);
                StarSystemInfo    starSystemInfo    = gamedb.GetStarSystemInfo(SystemId);
                gamedb.RemoveOrbitalObject(orbitalObjectInfo.ID);
                if (!orbitalObjectInfo.ParentID.HasValue)
                {
                    num1 = gamedb.InsertAsteroidBelt(new int?(), orbitalObjectInfo.StarSystemID, orbitalObjectInfo.OrbitalPath, "Swarmed Asteroid Belt", App.GetSafeRandom().Next());
                }
                else
                {
                    int         num2        = gamedb.GetStarSystemOrbitalObjectInfos(SystemId).Where <OrbitalObjectInfo>((Func <OrbitalObjectInfo, bool>)(x => !x.ParentID.HasValue)).Count <OrbitalObjectInfo>();
                    OrbitalPath orbitalPath = gamedb.OrbitNumberToOrbitalPath(num2 + 1, StellarClass.Parse(starSystemInfo.StellarClass).Size, new float?());
                    num1 = gamedb.InsertAsteroidBelt(new int?(), orbitalObjectInfo.StarSystemID, orbitalPath, "Swarmed Asteroid Belt", App.GetSafeRandom().Next());
                }
            }
            SwarmerInfo si = new SwarmerInfo();

            si.GrowthStage    = 0;
            si.SystemId       = SystemId;
            si.OrbitalId      = num1;
            si.HiveFleetId    = new int?(gamedb.InsertFleet(this.PlayerId, 0, SystemId, SystemId, "Swarm", FleetType.FL_NORMAL));
            si.QueenFleetId   = new int?();
            si.SpawnHiveDelay = 1;
            gamedb.InsertSwarmerInfo(si);
            gamedb.InsertShip(si.HiveFleetId.Value, this._hiveStage1DesignId, null, (ShipParams)0, new int?(), 0);
        }
Example #2
0
        public static void ClearTransform(GameDatabase db, SwarmerInfo si)
        {
            if (si == null || !si.QueenFleetId.HasValue)
            {
                return;
            }
            ShipInfo shipInfo = db.GetShipInfoByFleetID(si.QueenFleetId.Value, false).FirstOrDefault <ShipInfo>();

            if (shipInfo == null || !db.GetShipSystemPosition(shipInfo.ID).HasValue)
            {
                return;
            }
            db.UpdateShipSystemPosition(shipInfo.ID, new Matrix?());
        }
Example #3
0
        public static Matrix GetSpawnTransform(App app, int systemID)
        {
            StarSystemInfo starSystemInfo = app.GameDatabase.GetStarSystemInfo(systemID);

            if (starSystemInfo == (StarSystemInfo)null || starSystemInfo.IsDeepSpace)
            {
                return(Matrix.Identity);
            }
            SwarmerInfo swarmerInfo = app.GameDatabase.GetSwarmerInfos().FirstOrDefault <SwarmerInfo>((Func <SwarmerInfo, bool>)(x => x.SystemId == systemID));

            if (swarmerInfo != null && swarmerInfo.QueenFleetId.HasValue)
            {
                ShipInfo shipInfo = app.GameDatabase.GetShipInfoByFleetID(swarmerInfo.QueenFleetId.Value, false).FirstOrDefault <ShipInfo>();
                if (shipInfo != null)
                {
                    Matrix?shipSystemPosition = app.GameDatabase.GetShipSystemPosition(shipInfo.ID);
                    if (shipSystemPosition.HasValue)
                    {
                        return(shipSystemPosition.Value);
                    }
                }
            }
            int num1 = swarmerInfo != null ? swarmerInfo.OrbitalId : 0;

            if (num1 == 0)
            {
                Matrix matrix = Matrix.Identity;
                float  num2   = 0.0f;
                foreach (OrbitalObjectInfo orbitalObjectInfo in app.GameDatabase.GetStarSystemOrbitalObjectInfos(systemID).ToList <OrbitalObjectInfo>())
                {
                    if (app.GameDatabase.GetAsteroidBeltInfo(orbitalObjectInfo.ID) != null)
                    {
                        Matrix orbitalTransform = app.GameDatabase.GetOrbitalTransform(orbitalObjectInfo.ID);
                        float  lengthSquared    = orbitalTransform.Position.LengthSquared;
                        if ((double)lengthSquared > (double)num2)
                        {
                            num2   = lengthSquared;
                            matrix = orbitalTransform;
                            num1   = orbitalObjectInfo.ID;
                        }
                    }
                }
                if ((double)num2 > 0.0)
                {
                    return(matrix);
                }
            }
            if (num1 != 0)
            {
                Vector3 zero                  = Vector3.Zero;
                Matrix  orbitalTransform      = app.GameDatabase.GetOrbitalTransform(num1);
                List <LargeAsteroidInfo> list = app.GameDatabase.GetLargeAsteroidsInAsteroidBelt(num1).ToList <LargeAsteroidInfo>();
                if (list.Count > 0)
                {
                    int id = list.First <LargeAsteroidInfo>().ID;
                    orbitalTransform = app.GameDatabase.GetOrbitalTransform(id);
                    Vector3 position = orbitalTransform.Position;
                    float   num2     = position.Normalize();
                    Vector3 vector3  = Vector3.Cross(position, Vector3.UnitY) * 1000f;
                    orbitalTransform.Position = Vector3.Normalize(vector3) * num2;
                }
                return(orbitalTransform);
            }
            Matrix rotationYpr = Matrix.CreateRotationYPR(MathHelper.DegreesToRadians(new Random().NextInclusive(0.0f, 360f)), 0.0f, 0.0f);

            return(Matrix.CreateWorld(rotationYpr.Forward * 50000f, -rotationYpr.Forward, Vector3.UnitY));
        }
Example #4
0
        public static void SetInitialSwarmerPosition(GameSession sim, SwarmerInfo si, int systemId)
        {
            List <CombatZonePositionInfo> combatZonesForSystem = Kerberos.Sots.GameStates.StarSystem.GetCombatZonesForSystem(sim, systemId, 1f);

            if (combatZonesForSystem.Count == 0)
            {
                return;
            }
            FleetInfo fleetInfo = si.QueenFleetId.HasValue ? sim.GameDatabase.GetFleetInfo(si.QueenFleetId.Value) : (FleetInfo)null;

            if (fleetInfo == null || combatZonesForSystem.Count <= 0)
            {
                return;
            }
            Vector3 center = combatZonesForSystem.Last <CombatZonePositionInfo>().Center;
            float   num1   = 0.0f;
            int     num2   = si != null ? si.OrbitalId : 0;

            if (num2 == 0)
            {
                float val1 = 0.0f;
                foreach (OrbitalObjectInfo orbitalObjectInfo in sim.GameDatabase.GetStarSystemOrbitalObjectInfos(systemId).ToList <OrbitalObjectInfo>())
                {
                    if (sim.GameDatabase.GetAsteroidBeltInfo(orbitalObjectInfo.ID) != null)
                    {
                        Matrix orbitalTransform = sim.GameDatabase.GetOrbitalTransform(orbitalObjectInfo.ID);
                        double num3             = (double)Math.Max(val1, orbitalTransform.Position.LengthSquared);
                    }
                }
                if ((double)val1 > 0.0)
                {
                    num1 = (float)Math.Sqrt((double)val1);
                }
            }
            if (num2 != 0 && (double)num1 == 0.0)
            {
                Vector3 zero                  = Vector3.Zero;
                Matrix  orbitalTransform      = sim.GameDatabase.GetOrbitalTransform(num2);
                List <LargeAsteroidInfo> list = sim.GameDatabase.GetLargeAsteroidsInAsteroidBelt(num2).ToList <LargeAsteroidInfo>();
                if (list.Count > 0)
                {
                    int id = list.First <LargeAsteroidInfo>().ID;
                    orbitalTransform = sim.GameDatabase.GetOrbitalTransform(id);
                }
                num1 = orbitalTransform.Position.Length;
            }
            Vector3 vector3 = Vector3.UnitZ;

            if (fleetInfo.PreviousSystemID.HasValue)
            {
                int?previousSystemId = fleetInfo.PreviousSystemID;
                int num3             = systemId;
                if ((previousSystemId.GetValueOrDefault() != num3 ? 1 : (!previousSystemId.HasValue ? 1 : 0)) != 0)
                {
                    Vector3 starSystemOrigin = sim.GameDatabase.GetStarSystemOrigin(systemId);
                    vector3   = sim.GameDatabase.GetStarSystemOrigin(fleetInfo.PreviousSystemID.Value) - starSystemOrigin;
                    vector3.Y = 0.0f;
                    double num4 = (double)vector3.Normalize();
                }
            }
            Vector3    position = vector3 * num1;
            Vector3    forward  = -position;
            double     num5     = (double)forward.Normalize();
            List <int> list1    = sim.GameDatabase.GetShipsByFleetID(fleetInfo.ID).ToList <int>();

            if (list1.Count <= 0)
            {
                return;
            }
            sim.GameDatabase.UpdateShipSystemPosition(list1.First <int>(), new Matrix?(Matrix.CreateWorld(position, forward, Vector3.UnitY)));
        }
Example #5
0
        public void UpdateTurn(GameSession game, int id)
        {
            Random      safeRandom = App.GetSafeRandom();
            ShipInfo    shipInfo   = (ShipInfo)null;
            SwarmerInfo si         = game.GameDatabase.GetSwarmerInfo(id);

            if (si == null)
            {
                game.GameDatabase.RemoveEncounter(id);
            }
            else
            {
                if (si.QueenFleetId.HasValue)
                {
                    FleetInfo fleetInfo = game.GameDatabase.GetFleetInfo(si.QueenFleetId.Value);
                    if (fleetInfo == null)
                    {
                        si.QueenFleetId   = new int?();
                        si.SpawnHiveDelay = 1;
                    }
                    else if (fleetInfo.SystemID != 0 && fleetInfo.SystemID != si.SystemId)
                    {
                        if (si.SpawnHiveDelay <= 0)
                        {
                            int id1 = game.GameDatabase.GetStarSystemOrbitalObjectInfos(fleetInfo.SystemID).ToList <OrbitalObjectInfo>().First <OrbitalObjectInfo>((Func <OrbitalObjectInfo, bool>)(x => game.GameDatabase.GetAsteroidBeltInfo(x.ID) != null)).ID;
                            this.AddInstance(game.GameDatabase, game.AssetDatabase, fleetInfo.SystemID, id1);
                            game.GameDatabase.RemoveFleet(fleetInfo.ID);
                            si.QueenFleetId   = new int?();
                            si.SpawnHiveDelay = 1;
                            foreach (int playerid in game.GameDatabase.GetStandardPlayerIDs().ToList <int>())
                            {
                                if (StarMap.IsInRange(game.GameDatabase, playerid, fleetInfo.SystemID))
                                {
                                    game.GameDatabase.InsertTurnEvent(new TurnEvent()
                                    {
                                        EventType    = TurnEventType.EV_SWARM_INFESTATION,
                                        EventMessage = TurnEventMessage.EM_SWARM_INFESTATION,
                                        PlayerID     = playerid,
                                        SystemID     = fleetInfo.SystemID,
                                        TurnNumber   = game.GameDatabase.GetTurnCount()
                                    });
                                }
                            }
                        }
                        else
                        {
                            --si.SpawnHiveDelay;
                        }
                    }
                }
                if (si.HiveFleetId.HasValue)
                {
                    if (game.GameDatabase.GetFleetInfo(si.HiveFleetId.Value) == null)
                    {
                        si.HiveFleetId = new int?();
                    }
                    else
                    {
                        shipInfo = game.GameDatabase.GetShipInfoByFleetID(si.HiveFleetId.Value, true).ToList <ShipInfo>().FirstOrDefault <ShipInfo>((Func <ShipInfo, bool>)(x => x.DesignInfo.ID == this._larvalQueenDesignId));
                        int num = si.GrowthStage - game.AssetDatabase.GlobalSwarmerData.GrowthRateLarvaSpawn;
                        if (num > 0 && !si.QueenFleetId.HasValue && (shipInfo == null && safeRandom.CoinToss(Math.Max(0, num * 10))))
                        {
                            game.GameDatabase.InsertShip(si.HiveFleetId.Value, this._larvalQueenDesignId, "Swarm Larval Queen", (ShipParams)0, new int?(), 0);
                            si.GrowthStage = 0;
                        }
                    }
                }
                if (si.GrowthStage > game.AssetDatabase.GlobalSwarmerData.GrowthRateQueenSpawn && shipInfo != null)
                {
                    List <StarSystemInfo> list1 = game.GameDatabase.GetStarSystemInfos().ToList <StarSystemInfo>();
                    list1.RemoveAll((Predicate <StarSystemInfo>)(x => !game.GameDatabase.GetStarSystemOrbitalObjectInfos(x.ID).Any <OrbitalObjectInfo>((Func <OrbitalObjectInfo, bool>)(y => game.GameDatabase.GetAsteroidBeltInfo(y.ID) != null))));
                    foreach (SwarmerInfo swarmerInfo in game.GameDatabase.GetSwarmerInfos().ToList <SwarmerInfo>())
                    {
                        SwarmerInfo swarmer     = swarmerInfo;
                        int         targetID    = 0;
                        int         fleetSystem = 0;
                        if (swarmer.QueenFleetId.HasValue)
                        {
                            MissionInfo missionByFleetId = game.GameDatabase.GetMissionByFleetID(swarmer.QueenFleetId.Value);
                            if (missionByFleetId != null)
                            {
                                targetID = missionByFleetId.TargetSystemID;
                            }
                            FleetInfo fleetInfo = game.GameDatabase.GetFleetInfo(swarmer.QueenFleetId.Value);
                            if (fleetInfo != null)
                            {
                                fleetSystem = fleetInfo.SystemID;
                            }
                        }
                        list1.RemoveAll((Predicate <StarSystemInfo>)(x =>
                        {
                            if (x.ID != swarmer.SystemId && x.ID != targetID)
                            {
                                return(x.ID == fleetSystem);
                            }
                            return(true);
                        }));
                    }
                    List <StarSystemInfo> list2 = list1.OrderBy <StarSystemInfo, float>((Func <StarSystemInfo, float>)(x => (game.GameDatabase.GetStarSystemOrigin(si.SystemId) - x.Origin).Length)).ToList <StarSystemInfo>();
                    if (list2.Count > 0)
                    {
                        StarSystemInfo starSystemInfo = list2[safeRandom.Next(0, Math.Min(Math.Max(0, list2.Count - 1), 3))];
                        si.QueenFleetId = new int?(game.GameDatabase.InsertFleet(this.PlayerId, 0, si.SystemId, si.SystemId, "Swarm Queen", FleetType.FL_NORMAL));
                        game.GameDatabase.RemoveShip(shipInfo.ID);
                        game.GameDatabase.InsertShip(si.QueenFleetId.Value, this._swarmQueenDesignId, "Swarm Queen", (ShipParams)0, new int?(), 0);
                        int missionID = game.GameDatabase.InsertMission(si.QueenFleetId.Value, MissionType.STRIKE, starSystemInfo.ID, 0, 0, 0, true, new int?());
                        game.GameDatabase.InsertWaypoint(missionID, WaypointType.TravelTo, new int?(starSystemInfo.ID));
                    }
                    si.GrowthStage = 0;
                }
                if (si.HiveFleetId.HasValue && !si.QueenFleetId.HasValue)
                {
                    ++si.GrowthStage;
                }
                if (!si.HiveFleetId.HasValue && !si.QueenFleetId.HasValue)
                {
                    game.GameDatabase.RemoveEncounter(si.Id);
                }
                else
                {
                    game.GameDatabase.UpdateSwarmerInfo(si);
                }
            }
        }