/// <summary> /// if playerShipID is not null, ship data matching playerShipID won't be sent. /// </summary> /// <param name="playerShipID"></param> /// <param name="sendCargo">Always true for simulator, hould probably be false for clients</param> /// <returns></returns> public override AreaEntryData GetEntryData(int?playerShipID, bool sendCargo = false, bool writeShipStats = false) { var starData = new StarData() { Radius = Star.Radius, Density = Star.Density, InnerGravityStrength = Star.InnerGravityStrength, OuterGravityStrength = Star.OuterGravityStrength, Type = Star.Type }; var entryData = new SystemEntryData(base.GetEntryData(playerShipID, sendCargo, writeShipStats)) { Id = Id, AreaName = AreaName, AreaSize = AreaSize, StarData = starData }; List <Planet> planets = GetPlanets(); foreach (Planet p in planets) { entryData.Planets.Add(new PlanetData_SystemView() { Mass = (byte)p.Mass, Gravity = (byte)(p.Gravity * 100f), Distance = (Int16)p.Distance, MaxTrip = p.MaxTrip, CurrentTrip = p.CurrentTrip, Scale = (byte)p.Scale, PlanetType = p.PlanetType, IDToOrbit = p.IDToOrbit, Id = p.Id }); } List <Planet> moons = GetMoons(); foreach (Planet p in moons) { entryData.Moons.Add(new MoonData_SystemView() { Scale = p.Scale, Distance = (Int16)p.Distance, MaxTrip = p.MaxTrip, CurrentTrip = p.CurrentTrip, PlanetType = p.PlanetType, IDToOrbit = p.IDToOrbit, Id = p.Id }); } foreach (int p in _model.PortIDs) { Port pp = (Port)_areaLocator.GetArea(p); entryData.Ports.Add(new PortData_SystemView() { CurrentTrip = pp.CurrentTrip, Distance = (Int16)pp.Distance, Id = pp.Id, IDToOrbit = pp.IDToOrbit, IsMoon = pp.IsMoon, MaxTrip = pp.MaxTrip }); } entryData.SecurityLevel = SecurityLevel; return(entryData); }
/// <summary> /// Reads the incoming system from message. /// Todo: Kill me please. /// </summary> /// <param name="msg">The lidgren networking message.</param> public SystemEntryData ReadIncomingSystem(SystemEntryData data) { if (data == null) { ClientLogger.LogError("Trying to read incoming system but received null data."); return(null); } SystemName = data.AreaName; _clientShipManager.CurrentAreaId = data.Id; _spaceManager.InitializeSun(data.StarData.Radius, data.StarData.Density, data.StarData.InnerGravityStrength, data.StarData.OuterGravityStrength, data.StarData.Type); _spaceManager.CreateBorderAndSunGravity(data.AreaSize); _targetingService.DisableTargetSetting(); #region Planet Data foreach (PlanetData_SystemView p in data.Planets) { _spaceManager.CreatePlanet(p.Distance, p.MaxTrip, p.PlanetType, p.CurrentTrip, p.Scale, p.Id, data.Id, false); _physicsManager.World.ProcessChanges(); } #endregion #region Moon Data foreach (MoonData_SystemView p in data.Moons) { _spaceManager.CreatePlanet(p.Distance, p.MaxTrip, p.PlanetType, p.CurrentTrip, p.Scale, p.Id, p.IDToOrbit, true); _physicsManager.World.ProcessChanges(); } #endregion #region Warphole Data foreach (WarpholeData w in data.Warpholes) { _spaceManager.CreateWarphole(w.XPos, w.YPos, w.WarpIndex, w.DestinationAreaID); } #endregion #region Structure Data foreach (StructureData s in data.Structures) { var structure = InstantiateStructure(s); } #endregion #region Port Data foreach (PortData_SystemView p in data.Ports) { _spaceManager.CreatePort(p.Distance, p.MaxTrip, PlanetTypes.Port, p.CurrentTrip, 1, p.Id, data.Id, p.IsMoon); } #endregion _floatyAreaObjectManager.InstantiateFloatyAreaObjects(data.FloatyAreaObjects); if (_clientShipManager.PlayerShip != null) { _clientShipManager.RecreatePlayerShip(_physicsManager.World); _clientShipManager.PlayerShip.Position = new Vector2(data.NewPlayerXPos, data.NewPlayerYPos); } _clientShipManager.areaSecurityLevel = data.SecurityLevel; foreach (var s in data.Ships) { MessageReader.InstantiateShip(s, _physicsManager.World, _clientShipManager, false); } _targetingService.EnableTargetSetting(); _areaDataReceived = true; return(data); }