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); }
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); } } }