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