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]; } } }
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; }
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; }
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; }
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; }
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; }
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); }
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; }
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()); }
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; }
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; }
private static void SetLatLonAlt(Vessel vessel, VesselPositionMsgData msgData) { msgData.LatLonAlt[0] = vessel.latitude; msgData.LatLonAlt[1] = vessel.longitude; msgData.LatLonAlt[2] = vessel.altitude; }
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); }
/// <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); }
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; }
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; }