Пример #1
0
        public void ExecuteInstance(GameDatabase gamedb, AssetDatabase assetdb, int systemid)
        {
            NeutronStarInfo nsi = new NeutronStarInfo();

            nsi.FleetId        = gamedb.InsertFleet(this.PlayerId, 0, 0, 0, "NetronStar", FleetType.FL_NORMAL);
            nsi.TargetSystemId = systemid;
            Vector3 starSystemOrigin = gamedb.GetStarSystemOrigin(nsi.TargetSystemId);
            Vector3 travelDirection  = this.GetTravelDirection(gamedb, starSystemOrigin, nsi.TargetSystemId);
            int     shipID           = gamedb.InsertShip(nsi.FleetId, this._neutronDesignId, null, (ShipParams)0, new int?(), 0);

            gamedb.UpdateShipSystemPosition(shipID, new Matrix?(Matrix.Identity));
            Vector3 vector3   = starSystemOrigin - travelDirection * 20f;
            int     missionID = gamedb.InsertMission(nsi.FleetId, MissionType.STRIKE, nsi.TargetSystemId, 0, 0, 0, true, new int?());

            gamedb.InsertWaypoint(missionID, WaypointType.TravelTo, new int?(nsi.TargetSystemId));
            gamedb.InsertMoveOrder(nsi.FleetId, 0, vector3, nsi.TargetSystemId, Vector3.Zero);
            nsi.DeepSpaceSystemId  = new int?(gamedb.InsertStarSystem(new int?(), App.Localize("@UI_STARMAP_ENCOUNTER_DEEPSPACE"), new int?(), "Deepspace", vector3, false, false, new int?()));
            nsi.DeepSpaceOrbitalId = new int?(gamedb.InsertOrbitalObject(new int?(), nsi.DeepSpaceSystemId.Value, new OrbitalPath()
            {
                Scale = new Vector2(20000f, Ellipse.CalcSemiMinorAxis(20000f, 0.0f)),
                InitialAngle = 0.0f
            }, "space"));
            gamedb.GetOrbitalTransform(nsi.DeepSpaceOrbitalId.Value);
            gamedb.InsertNeutronStarInfo(nsi);
        }
Пример #2
0
        public void UpdateTurn(GameSession game, int id)
        {
            NeutronStarInfo nsi       = game.GameDatabase.GetNeutronStarInfo(id);
            FleetInfo       fleetInfo = nsi != null?game.GameDatabase.GetFleetInfo(nsi.FleetId) : (FleetInfo)null;

            if (fleetInfo == null)
            {
                game.GameDatabase.RemoveEncounter(id);
            }
            else
            {
                MissionInfo missionByFleetId = game.GameDatabase.GetMissionByFleetID(fleetInfo.ID);
                if (game.GameDatabase.GetMoveOrderInfoByFleetID(fleetInfo.ID) != null)
                {
                    FleetLocation fl = game.GameDatabase.GetFleetLocation(fleetInfo.ID, false);
                    if (!nsi.DeepSpaceSystemId.HasValue || game.GameDatabase.GetStarSystemInfos().Any <StarSystemInfo>((Func <StarSystemInfo, bool>)(x =>
                    {
                        if (x.ID != nsi.DeepSpaceSystemId.Value)
                        {
                            return((double)(game.GameDatabase.GetStarSystemOrigin(x.ID) - fl.Coords).LengthSquared < 9.99999974737875E-05);
                        }
                        return(false);
                    })))
                    {
                        return;
                    }
                    game.GameDatabase.UpdateStarSystemOrigin(nsi.DeepSpaceSystemId.Value, fl.Coords);
                }
                else
                {
                    if (missionByFleetId != null)
                    {
                        game.GameDatabase.RemoveMission(missionByFleetId.ID);
                    }
                    StarSystemInfo starSystemInfo = game.GameDatabase.GetStarSystemInfo(fleetInfo.SystemID);
                    foreach (int standardPlayerId in game.GameDatabase.GetStandardPlayerIDs())
                    {
                        if (StarMap.IsInRange(game.GameDatabase, standardPlayerId, game.GameDatabase.GetFleetLocation(fleetInfo.ID, false).Coords, 1f, (Dictionary <int, List <ShipInfo> >)null))
                        {
                            game.GameDatabase.InsertTurnEvent(new TurnEvent()
                            {
                                EventType    = TurnEventType.EV_NEUTRON_STAR_DESTROYED_SYSTEM,
                                EventMessage = TurnEventMessage.EM_NEUTRON_STAR_DESTROYED_SYSTEM,
                                SystemID     = starSystemInfo.ID,
                                PlayerID     = this.PlayerID,
                                TurnNumber   = game.GameDatabase.GetTurnCount()
                            });
                        }
                    }
                    if (nsi.DeepSpaceSystemId.HasValue)
                    {
                        game.GameDatabase.RemoveFleet(fleetInfo.ID);
                        game.GameDatabase.RemoveEncounter(id);
                        game.GameDatabase.DestroyStarSystem(game, nsi.DeepSpaceSystemId.Value);
                    }
                    if (fleetInfo.SystemID != 0)
                    {
                        game.GameDatabase.DestroyStarSystem(game, starSystemInfo.ID);
                    }
                    if (!(game.App.CurrentState is StarMapState))
                    {
                        return;
                    }
                    ((StarMapState)game.App.CurrentState).ClearSelectedObject();
                    ((StarMapState)game.App.CurrentState).RefreshStarmap(StarMapState.StarMapRefreshType.REFRESH_ALL);
                }
            }
        }