Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
        /// <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);
        }