コード例 #1
0
 public static void UpdateVesselProtoEvaFsm(VesselEvaMsgData msgData)
 {
     if (AllPlayerVessels.TryGetValue(msgData.VesselId, out var vesselProtoUpd))
     {
         VesselEvaSystem.Singleton.UpdateFsmStateInProtoVessel(vesselProtoUpd.ProtoVessel, msgData.NewState, msgData.LastBoundStep);
     }
 }
コード例 #2
0
        /// <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());
        }