public static void UpdateVesselProtoEvaFsm(VesselEvaMsgData msgData) { if (AllPlayerVessels.TryGetValue(msgData.VesselId, out var vesselProtoUpd)) { VesselEvaSystem.Singleton.UpdateFsmStateInProtoVessel(vesselProtoUpd.ProtoVessel, msgData.NewState, msgData.LastBoundStep); } }
/// <summary> /// Updates the proto vessel with the values we received about a eva state change of a vessel /// </summary> private static string UpdateProtoVesselFileWithNewEvaData(string vesselData, VesselEvaMsgData msgData) { var document = new XmlDocument(); document.LoadXml(vesselData); var module = $@"/{ConfigNodeXmlParser.StartElement}/{ConfigNodeXmlParser.ParentNode}[@name='PART']/{ConfigNodeXmlParser.ValueNode}[@name='name' and text()=""kerbalEVA""]/" + $"following-sibling::{ConfigNodeXmlParser.ParentNode}[@name='MODULE']/{ConfigNodeXmlParser.ValueNode}" + $@"[@name='name' and text()=""KerbalEVA""]/parent::{ConfigNodeXmlParser.ParentNode}[@name='MODULE']"; var xpath = $"{module}/{ConfigNodeXmlParser.ValueNode}[@name='state']"; var fieldNode = document.SelectSingleNode(xpath); if (fieldNode != null) { fieldNode.InnerText = msgData.NewState; } // ReSharper disable once CompareOfFloatsByEqualityOperator if (msgData.LastBoundStep != float.NaN) { xpath = $"{module}/{ConfigNodeXmlParser.ValueNode}[@name='lastBoundStep']"; fieldNode = document.SelectSingleNode(xpath); if (fieldNode != null) { fieldNode.InnerText = msgData.LastBoundStep.ToString(CultureInfo.InvariantCulture); } } return(document.ToIndentedString()); }