示例#1
0
        public static void UpdateVesselProtoPosition(VesselPositionMsgData vesselPositionMsgData)
        {
            if (AllPlayerVessels.TryGetValue(vesselPositionMsgData.VesselId, out var vesselProtoUpd))
            {
                vesselProtoUpd.ProtoVessel.latitude  = vesselPositionMsgData.LatLonAlt[0];
                vesselProtoUpd.ProtoVessel.longitude = vesselPositionMsgData.LatLonAlt[1];
                vesselProtoUpd.ProtoVessel.altitude  = vesselPositionMsgData.LatLonAlt[2];
                vesselProtoUpd.ProtoVessel.height    = vesselPositionMsgData.HeightFromTerrain;

                vesselProtoUpd.ProtoVessel.normal[0] = (float)vesselPositionMsgData.NormalVector[0];
                vesselProtoUpd.ProtoVessel.normal[1] = (float)vesselPositionMsgData.NormalVector[1];
                vesselProtoUpd.ProtoVessel.normal[2] = (float)vesselPositionMsgData.NormalVector[2];

                vesselProtoUpd.ProtoVessel.rotation[0] = vesselPositionMsgData.SrfRelRotation[0];
                vesselProtoUpd.ProtoVessel.rotation[1] = vesselPositionMsgData.SrfRelRotation[1];
                vesselProtoUpd.ProtoVessel.rotation[2] = vesselPositionMsgData.SrfRelRotation[2];
                vesselProtoUpd.ProtoVessel.rotation[3] = vesselPositionMsgData.SrfRelRotation[3];

                vesselProtoUpd.ProtoVessel.CoM[0] = (float)vesselPositionMsgData.Com[0];
                vesselProtoUpd.ProtoVessel.CoM[1] = (float)vesselPositionMsgData.Com[1];
                vesselProtoUpd.ProtoVessel.CoM[2] = (float)vesselPositionMsgData.Com[2];

                if (vesselProtoUpd.ProtoVessel.orbitSnapShot != null)
                {
                    vesselProtoUpd.ProtoVessel.orbitSnapShot.inclination        = vesselPositionMsgData.Orbit[0];
                    vesselProtoUpd.ProtoVessel.orbitSnapShot.eccentricity       = vesselPositionMsgData.Orbit[1];
                    vesselProtoUpd.ProtoVessel.orbitSnapShot.semiMajorAxis      = vesselPositionMsgData.Orbit[2];
                    vesselProtoUpd.ProtoVessel.orbitSnapShot.LAN                = vesselPositionMsgData.Orbit[3];
                    vesselProtoUpd.ProtoVessel.orbitSnapShot.argOfPeriapsis     = vesselPositionMsgData.Orbit[4];
                    vesselProtoUpd.ProtoVessel.orbitSnapShot.meanAnomalyAtEpoch = vesselPositionMsgData.Orbit[5];
                    vesselProtoUpd.ProtoVessel.orbitSnapShot.epoch              = vesselPositionMsgData.Orbit[6];
                    vesselProtoUpd.ProtoVessel.orbitSnapShot.ReferenceBodyIndex = (int)vesselPositionMsgData.Orbit[7];
                }
            }
        }
示例#2
0
 private static void SetSrfRelRotation(Vessel vessel, VesselPositionMsgData msgData)
 {
     msgData.SrfRelRotation[0] = vessel.srfRelRotation.x;
     msgData.SrfRelRotation[1] = vessel.srfRelRotation.y;
     msgData.SrfRelRotation[2] = vessel.srfRelRotation.z;
     msgData.SrfRelRotation[3] = vessel.srfRelRotation.w;
 }
示例#3
0
        private static void SetVelocityVector(Vessel vessel, VesselPositionMsgData msgData)
        {
            var velVector = Quaternion.Inverse(vessel.mainBody.bodyTransform.rotation) * vessel.srf_velocity;

            msgData.VelocityVector[0] = velVector.x;
            msgData.VelocityVector[1] = velVector.y;
            msgData.VelocityVector[2] = velVector.z;
        }
示例#4
0
        private static void SetVelocity(Vessel vessel, VesselPositionMsgData msgData)
        {
            Vector3d srfVel = UnityEngine.Quaternion.Inverse(vessel.mainBody.bodyTransform.rotation) * vessel.srf_velocity;

            msgData.Velocity[0] = srfVel.x;
            msgData.Velocity[1] = srfVel.y;
            msgData.Velocity[2] = srfVel.z;
        }
示例#5
0
 private static void SetOrbit(Vessel vessel, VesselPositionMsgData msgData)
 {
     msgData.Orbit[0] = vessel.orbit.inclination;
     msgData.Orbit[1] = vessel.orbit.eccentricity;
     msgData.Orbit[2] = vessel.orbit.semiMajorAxis;
     msgData.Orbit[3] = vessel.orbit.LAN;
     msgData.Orbit[4] = vessel.orbit.argumentOfPeriapsis;
     msgData.Orbit[5] = vessel.orbit.meanAnomalyAtEpoch;
     msgData.Orbit[6] = vessel.orbit.epoch;
     msgData.Orbit[7] = vessel.orbit.referenceBody.flightGlobalsIndex;
 }
 public VesselPositionAltUpdate(VesselPositionMsgData msgData)
 {
     Id                = Guid.NewGuid();
     PlanetTime        = msgData.PlanetTime;
     SentTime          = msgData.GameSentTime;
     VesselId          = msgData.VesselId;
     BodyName          = msgData.BodyName;
     TransformRotation = msgData.TransformRotation;
     TransformPosition = msgData.TransformPosition;
     LatLonAlt         = msgData.LatLonAlt;
     Orbit             = msgData.Orbit;
 }
示例#7
0
 public VesselPositionUpdate(VesselPositionMsgData msgData)
 {
     Id                = Guid.NewGuid();
     PlanetTime        = msgData.PlanetTime;
     SentTime          = msgData.GameSentTime;
     VesselId          = msgData.VesselId;
     BodyName          = msgData.BodyName;
     TransformRotation = msgData.TransformRotation;
     OrbitPosition     = msgData.OrbitPosition;
     Acceleration      = msgData.Acceleration;
     WorldPosition     = msgData.TransformPosition;
     LatLonAlt         = msgData.LatLonAlt;
     OrbitVelocity     = msgData.OrbitVelocity;
     Velocity          = msgData.Velocity;
     Orbit             = msgData.Orbit;
     Landed            = msgData.Landed;
 }
示例#8
0
        public VesselPositionUpdate(VesselPositionMsgData msgData)
        {
            VesselId          = msgData.VesselId;
            BodyIndex         = msgData.BodyIndex;
            SubspaceId        = msgData.SubspaceId;
            HeightFromTerrain = msgData.HeightFromTerrain;
            Landed            = msgData.Landed;
            Splashed          = msgData.Splashed;
            GameTimeStamp     = msgData.GameTime;
            HackingGravity    = msgData.HackingGravity;

            Array.Copy(msgData.SrfRelRotation, SrfRelRotation, 4);
            Array.Copy(msgData.LatLonAlt, LatLonAlt, 3);
            Array.Copy(msgData.VelocityVector, VelocityVector, 3);
            Array.Copy(msgData.NormalVector, NormalVector, 3);
            Array.Copy(msgData.Orbit, Orbit, 8);
        }
示例#9
0
 public VesselPositionAltUpdate(VesselPositionMsgData parent)
 {
     Velocity          = parent.Velocity;
     VesselId          = parent.VesselId;
     Acceleration      = parent.Acceleration;
     BodyName          = parent.BodyName;
     GameSentTime      = parent.GameSentTime;
     Landed            = parent.Landed;
     LatLonAlt         = parent.LatLonAlt;
     Orbit             = parent.Orbit;
     OrbitPosition     = parent.OrbitPosition;
     OrbitVelocity     = parent.OrbitVelocity;
     PlanetTime        = parent.PlanetTime;
     ReceiveTime       = parent.ReceiveTime;
     RefTransformPos   = parent.RefTransformPos;
     RefTransformRot   = parent.RefTransformRot;
     SentTime          = parent.SentTime;
     TransformPosition = parent.TransformPosition;
     TransformRotation = parent.TransformRotation;
 }
示例#10
0
        private static VesselPositionUpdate CreatePosUpdateFromMessage(VesselPositionMsgData msgData)
        {
            var update = new VesselPositionUpdate
            {
                VesselId          = msgData.VesselId,
                BodyIndex         = msgData.BodyIndex,
                HeightFromTerrain = msgData.HeightFromTerrain,
                Landed            = msgData.Landed,
                Splashed          = msgData.Splashed,
                GameTimeStamp     = msgData.GameTime,
                UtcSentTime       = msgData.UtcSentTime,
                ReceiveTime       = LunaTime.UtcNow,
                HackingGravity    = msgData.HackingGravity,
            };

            Array.Copy(msgData.SrfRelRotation, update.SrfRelRotation, 4);
            Array.Copy(msgData.Velocity, update.Velocity, 3);
            Array.Copy(msgData.LatLonAlt, update.LatLonAlt, 3);
            Array.Copy(msgData.NormalVector, update.NormalVector, 3);
            Array.Copy(msgData.Orbit, update.Orbit, 8);

            return(update);
        }
        /// <summary>
        /// Updates the proto vessel with the values we received about a position of a vessel
        /// </summary>
        private static string UpdateProtoVesselWithNewPositionData(string vesselData, VesselPositionMsgData msgData)
        {
            var document = new XmlDocument();

            document.LoadXml(vesselData);

            var node = document.SelectSingleNode($"/{ConfigNodeXmlParser.StartElement}/{ConfigNodeXmlParser.ValueNode}[@name='lat']");

            if (node != null)
            {
                node.InnerText = msgData.LatLonAlt[0].ToString(CultureInfo.InvariantCulture);
            }

            node = document.SelectSingleNode($"/{ConfigNodeXmlParser.StartElement}/{ConfigNodeXmlParser.ValueNode}[@name='lon']");
            if (node != null)
            {
                node.InnerText = msgData.LatLonAlt[1].ToString(CultureInfo.InvariantCulture);
            }

            node = document.SelectSingleNode($"/{ConfigNodeXmlParser.StartElement}/{ConfigNodeXmlParser.ValueNode}[@name='alt']");
            if (node != null)
            {
                node.InnerText = msgData.LatLonAlt[2].ToString(CultureInfo.InvariantCulture);
            }

            node = document.SelectSingleNode($"/{ConfigNodeXmlParser.StartElement}/{ConfigNodeXmlParser.ValueNode}[@name='hgt']");
            if (node != null)
            {
                node.InnerText = msgData.HeightFromTerrain.ToString(CultureInfo.InvariantCulture);
            }

            node = document.SelectSingleNode($"/{ConfigNodeXmlParser.StartElement}/{ConfigNodeXmlParser.ValueNode}[@name='nrm']");
            if (node != null)
            {
                node.InnerText = $"{msgData.NormalVector[0].ToString(CultureInfo.InvariantCulture)}," +
                                 $"{msgData.NormalVector[1].ToString(CultureInfo.InvariantCulture)}," +
                                 $"{msgData.NormalVector[2].ToString(CultureInfo.InvariantCulture)}";
            }

            node = document.SelectSingleNode($"/{ConfigNodeXmlParser.StartElement}/{ConfigNodeXmlParser.ValueNode}[@name='rot']");
            if (node != null)
            {
                node.InnerText = $"{msgData.SrfRelRotation[0].ToString(CultureInfo.InvariantCulture)}," +
                                 $"{msgData.SrfRelRotation[1].ToString(CultureInfo.InvariantCulture)}," +
                                 $"{msgData.SrfRelRotation[2].ToString(CultureInfo.InvariantCulture)}," +
                                 $"{msgData.SrfRelRotation[3].ToString(CultureInfo.InvariantCulture)}";
            }

            node = document.SelectSingleNode($"/{ConfigNodeXmlParser.StartElement}/{ConfigNodeXmlParser.ParentNode}[@name='ORBIT']/{ConfigNodeXmlParser.ValueNode}[@name='INC']");
            if (node != null)
            {
                node.InnerText = msgData.Orbit[0].ToString(CultureInfo.InvariantCulture);
            }
            node = document.SelectSingleNode($"/{ConfigNodeXmlParser.StartElement}/{ConfigNodeXmlParser.ParentNode}[@name='ORBIT']/{ConfigNodeXmlParser.ValueNode}[@name='ECC']");
            if (node != null)
            {
                node.InnerText = msgData.Orbit[1].ToString(CultureInfo.InvariantCulture);
            }
            node = document.SelectSingleNode($"/{ConfigNodeXmlParser.StartElement}/{ConfigNodeXmlParser.ParentNode}[@name='ORBIT']/{ConfigNodeXmlParser.ValueNode}[@name='SMA']");
            if (node != null)
            {
                node.InnerText = msgData.Orbit[2].ToString(CultureInfo.InvariantCulture);
            }
            node = document.SelectSingleNode($"/{ConfigNodeXmlParser.StartElement}/{ConfigNodeXmlParser.ParentNode}[@name='ORBIT']/{ConfigNodeXmlParser.ValueNode}[@name='LAN']");
            if (node != null)
            {
                node.InnerText = msgData.Orbit[3].ToString(CultureInfo.InvariantCulture);
            }
            node = document.SelectSingleNode($"/{ConfigNodeXmlParser.StartElement}/{ConfigNodeXmlParser.ParentNode}[@name='ORBIT']/{ConfigNodeXmlParser.ValueNode}[@name='LPE']");
            if (node != null)
            {
                node.InnerText = msgData.Orbit[4].ToString(CultureInfo.InvariantCulture);
            }
            node = document.SelectSingleNode($"/{ConfigNodeXmlParser.StartElement}/{ConfigNodeXmlParser.ParentNode}[@name='ORBIT']/{ConfigNodeXmlParser.ValueNode}[@name='MNA']");
            if (node != null)
            {
                node.InnerText = msgData.Orbit[5].ToString(CultureInfo.InvariantCulture);
            }
            node = document.SelectSingleNode($"/{ConfigNodeXmlParser.StartElement}/{ConfigNodeXmlParser.ParentNode}[@name='ORBIT']/{ConfigNodeXmlParser.ValueNode}[@name='EPH']");
            if (node != null)
            {
                node.InnerText = msgData.Orbit[6].ToString(CultureInfo.InvariantCulture);
            }
            node = document.SelectSingleNode($"/{ConfigNodeXmlParser.StartElement}/{ConfigNodeXmlParser.ParentNode}[@name='ORBIT']/{ConfigNodeXmlParser.ValueNode}[@name='REF']");
            if (node != null)
            {
                node.InnerText = msgData.Orbit[7].ToString(CultureInfo.InvariantCulture);
            }

            return(document.ToIndentedString());
        }
示例#12
0
 private static void SetOrbitPos(Vessel vessel, VesselPositionMsgData msgData)
 {
     msgData.OrbitPos[0] = vessel.orbitDriver.orbit.pos.x;
     msgData.OrbitPos[1] = vessel.orbitDriver.orbit.pos.y;
     msgData.OrbitPos[2] = vessel.orbitDriver.orbit.pos.z;
 }
示例#13
0
 private static void SetOrbitVel(Vessel vessel, VesselPositionMsgData msgData)
 {
     msgData.OrbitVel[0] = vessel.orbitDriver.orbit.vel.x;
     msgData.OrbitVel[1] = vessel.orbitDriver.orbit.vel.y;
     msgData.OrbitVel[2] = vessel.orbitDriver.orbit.vel.z;
 }
示例#14
0
 private static void SetLatLonAlt(Vessel vessel, VesselPositionMsgData msgData)
 {
     msgData.LatLonAlt[0] = vessel.latitude;
     msgData.LatLonAlt[1] = vessel.longitude;
     msgData.LatLonAlt[2] = vessel.altitude;
 }
示例#15
0
 private static void SetNormalVector(Vessel vessel, VesselPositionMsgData msgData)
 {
     msgData.NormalVector[0] = vessel.terrainNormal.x;
     msgData.NormalVector[1] = vessel.terrainNormal.y;
     msgData.NormalVector[2] = vessel.terrainNormal.z;
 }
 public static void RelayVesselUpdateMsg(ClientStructure client, VesselPositionMsgData msg)
 {
     IncomingUpdates.Enqueue(new KeyValuePair <ClientStructure, VesselPositionMsgData>(client, msg));
 }
 private static double CalculateDistance(VesselPositionMsgData point1, VesselPositionMsgData point2)
 {
     //return CalculateDistance(new[] { point1.X, point1.Y, point1.Z }, new[] { point2.X, point2.Y, point2.Z });
     return(0);
 }
示例#18
0
        /// <summary>
        /// Updates the proto vessel file with the values we received about a position of a vessel
        /// </summary>
        private static string UpdateProtoVesselFileWithNewPositionData(string[] protoVesselLines, VesselPositionMsgData msgData)
        {
            var fullText = string.Join(Environment.NewLine, protoVesselLines);

            var regex       = new Regex("(?<prefix>lat = )(.*)\n");
            var replacement = "${prefix}" + $"{msgData.LatLonAlt[0].ToString(CultureInfo.InvariantCulture)}{Environment.NewLine}";

            fullText = regex.Replace(fullText, replacement, 1);

            regex       = new Regex("(?<prefix>lon = )(.*)\n");
            replacement = "${prefix}" + $"{msgData.LatLonAlt[1].ToString(CultureInfo.InvariantCulture)}{Environment.NewLine}";
            fullText    = regex.Replace(fullText, replacement, 1);

            regex       = new Regex("(?<prefix>alt = )(.*)\n");
            replacement = "${prefix}" + $"{msgData.LatLonAlt[2].ToString(CultureInfo.InvariantCulture)}{Environment.NewLine}";
            fullText    = regex.Replace(fullText, replacement, 1);

            regex       = new Regex("(?<prefix>hgt = )(.*)\n");
            replacement = "${prefix}" + $"{msgData.HeightFromTerrain.ToString(CultureInfo.InvariantCulture)}{Environment.NewLine}";
            fullText    = regex.Replace(fullText, replacement, 1);

            regex       = new Regex("(?<prefix>nrm = )(.*)\n");
            replacement = "${prefix}" + $"{msgData.NormalVector[0].ToString(CultureInfo.InvariantCulture)}," +
                          $"{msgData.NormalVector[1].ToString(CultureInfo.InvariantCulture)}," +
                          $"{msgData.NormalVector[2].ToString(CultureInfo.InvariantCulture)}{Environment.NewLine}";
            fullText = regex.Replace(fullText, replacement, 1);

            regex       = new Regex("(?<prefix>rot = )(.*)\n");
            replacement = "${prefix}" + $"{msgData.SrfRelRotation[0].ToString(CultureInfo.InvariantCulture)}," +
                          $"{msgData.SrfRelRotation[1].ToString(CultureInfo.InvariantCulture)}," +
                          $"{msgData.SrfRelRotation[2].ToString(CultureInfo.InvariantCulture)}," +
                          $"{msgData.SrfRelRotation[3].ToString(CultureInfo.InvariantCulture)}{Environment.NewLine}";
            fullText = regex.Replace(fullText, replacement, 1);

            regex       = new Regex("(?<prefix>CoM = )(.*)\n");
            replacement = "${prefix}" + $"{msgData.Com[0].ToString(CultureInfo.InvariantCulture)}," +
                          $"{msgData.Com[1].ToString(CultureInfo.InvariantCulture)}," +
                          $"{msgData.Com[2].ToString(CultureInfo.InvariantCulture)}\r";
            fullText = regex.Replace(fullText, replacement, 1);

            regex       = new Regex("(?<prefix>INC = )(.*)\n"); //inclination
            replacement = "${prefix}" + msgData.Orbit[0].ToString(CultureInfo.InvariantCulture) + Environment.NewLine;
            fullText    = regex.Replace(fullText, replacement, 1);

            regex       = new Regex("(?<prefix>ECC = )(.*)\n"); //eccentricity
            replacement = "${prefix}" + msgData.Orbit[1].ToString(CultureInfo.InvariantCulture) + Environment.NewLine;
            fullText    = regex.Replace(fullText, replacement, 1);

            regex       = new Regex("(?<prefix>SMA = )(.*)\n"); //semiMajorAxis
            replacement = "${prefix}" + msgData.Orbit[2].ToString(CultureInfo.InvariantCulture) + Environment.NewLine;
            fullText    = regex.Replace(fullText, replacement, 1);

            regex       = new Regex("(?<prefix>LAN = )(.*)\n"); //LAN
            replacement = "${prefix}" + msgData.Orbit[3].ToString(CultureInfo.InvariantCulture) + Environment.NewLine;
            fullText    = regex.Replace(fullText, replacement, 1);

            regex       = new Regex("(?<prefix>LPE = )(.*)\n"); //argumentOfPeriapsis
            replacement = "${prefix}" + msgData.Orbit[4].ToString(CultureInfo.InvariantCulture) + Environment.NewLine;
            fullText    = regex.Replace(fullText, replacement, 1);

            regex       = new Regex("(?<prefix>MNA = )(.*)\n"); //meanAnomalyAtEpoch
            replacement = "${prefix}" + msgData.Orbit[5].ToString(CultureInfo.InvariantCulture) + Environment.NewLine;
            fullText    = regex.Replace(fullText, replacement, 1);

            regex       = new Regex("(?<prefix>EPH = )(.*)\n"); //epoch
            replacement = "${prefix}" + msgData.Orbit[6].ToString(CultureInfo.InvariantCulture) + Environment.NewLine;
            fullText    = regex.Replace(fullText, replacement, 1);

            regex       = new Regex("(?<prefix>REF = )(.*)\n"); //referenceBody.flightGlobalsIndex
            replacement = "${prefix}" + msgData.Orbit[7].ToString(CultureInfo.InvariantCulture) + Environment.NewLine;
            fullText    = regex.Replace(fullText, replacement, 1);

            return(fullText);
        }
示例#19
0
 private static void SetTransformPosition(Vessel vessel, VesselPositionMsgData msgData)
 {
     msgData.TransformPosition[0] = vessel.ReferenceTransform.position.x;
     msgData.TransformPosition[1] = vessel.ReferenceTransform.position.y;
     msgData.TransformPosition[2] = vessel.ReferenceTransform.position.z;
 }
 private static void GetComD(Vessel vessel, VesselPositionMsgData msgData)
 {
     msgData.ComD[0] = vessel.CoMD.x;
     msgData.ComD[1] = vessel.CoMD.y;
     msgData.ComD[2] = vessel.CoMD.z;
 }
示例#21
0
 private static void GetCom(Vessel vessel, VesselPositionMsgData msgData)
 {
     msgData.Com[0] = vessel.CoM.x;
     msgData.Com[1] = vessel.CoM.y;
     msgData.Com[2] = vessel.CoM.z;
 }