/// <summary>
        /// Updates the proto vessel with the values we received about a part module change
        /// </summary>
        private static void UpdateProtoVesselFileWithNewPartSyncUiFieldData(Classes.Vessel vessel, VesselPartSyncUiFieldMsgData msgData)
        {
            var part = vessel.GetPart(msgData.PartFlightId);

            if (part != null)
            {
                var module = part.GetSingleModule(msgData.ModuleName);
                if (module != null)
                {
                    switch (msgData.FieldType)
                    {
                    case PartSyncFieldType.Boolean:
                        module.UpdateValue(msgData.FieldName, msgData.BoolValue.ToString(CultureInfo.InvariantCulture));
                        break;

                    case PartSyncFieldType.Integer:
                        module.UpdateValue(msgData.FieldName, msgData.IntValue.ToString(CultureInfo.InvariantCulture));
                        break;

                    case PartSyncFieldType.Float:
                        module.UpdateValue(msgData.FieldName, msgData.FloatValue.ToString(CultureInfo.InvariantCulture));
                        break;

                    default:
                        throw new ArgumentOutOfRangeException();
                    }
                }
            }
        }
Пример #2
0
        /// <summary>
        /// Updates the proto vessel with the values we received about a part module change
        /// </summary>
        private static void UpdateProtoVesselFileWithNewPartSyncFieldData(Classes.Vessel vessel, VesselPartSyncFieldMsgData msgData)
        {
            var part = vessel.GetPart(msgData.PartFlightId);

            if (part != null)
            {
                var module = part.GetSingleModule(msgData.ModuleName);
                if (module != null)
                {
                    switch (msgData.FieldType)
                    {
                    case PartSyncFieldType.Boolean:
                        module.UpdateValue(msgData.FieldName, msgData.BoolValue.ToString(CultureInfo.InvariantCulture));
                        break;

                    case PartSyncFieldType.Integer:
                        module.UpdateValue(msgData.FieldName, msgData.IntValue.ToString(CultureInfo.InvariantCulture));
                        break;

                    case PartSyncFieldType.Float:
                        module.UpdateValue(msgData.FieldName, msgData.FloatValue.ToString(CultureInfo.InvariantCulture));
                        break;

                    case PartSyncFieldType.Double:
                        module.UpdateValue(msgData.FieldName, msgData.DoubleValue.ToString(CultureInfo.InvariantCulture));
                        break;

                    case PartSyncFieldType.Vector3:
                        module.UpdateValue(msgData.FieldName, $"{msgData.VectorValue[0].ToString(CultureInfo.InvariantCulture)}," +
                                           $"{msgData.VectorValue[1].ToString(CultureInfo.InvariantCulture)}," +
                                           $"{msgData.VectorValue[2].ToString(CultureInfo.InvariantCulture)}");
                        break;

                    case PartSyncFieldType.Quaternion:
                        module.UpdateValue(msgData.FieldName, $"{msgData.QuaternionValue[0].ToString(CultureInfo.InvariantCulture)}," +
                                           $"{msgData.QuaternionValue[1].ToString(CultureInfo.InvariantCulture)}," +
                                           $"{msgData.QuaternionValue[2].ToString(CultureInfo.InvariantCulture)}," +
                                           $"{msgData.QuaternionValue[3].ToString(CultureInfo.InvariantCulture)}");
                        break;

                    case PartSyncFieldType.Object:
                    case PartSyncFieldType.String:
                    case PartSyncFieldType.Enum:
                        module.UpdateValue(msgData.FieldName, msgData.StrValue);
                        break;

                    default:
                        throw new ArgumentOutOfRangeException();
                    }
                }
            }
        }
 /// <summary>
 /// Raw updates a vessel in the dictionary and takes care of the locking in case we received another vessel message type
 /// </summary>
 public static void RawConfigNodeInsertOrUpdate(Guid vesselId, string vesselDataInConfigNodeFormat)
 {
     Task.Run(() =>
     {
         var vessel = new Classes.Vessel(vesselDataInConfigNodeFormat);
         if (GeneralSettings.SettingsStore.ModControl)
         {
             var vesselParts = vessel.Parts.GetAllValues().Select(p => p.Fields.GetSingle("name").Value);
             var bannedParts = vesselParts.Except(ModFileSystem.ModControl.AllowedParts);
             if (bannedParts.Any())
             {
                 LunaLog.Warning($"Received a vessel with BANNED parts! {vesselId}");
                 return;
             }
         }
         lock (Semaphore.GetOrAdd(vesselId, new object()))
         {
             VesselStoreSystem.CurrentVessels.AddOrUpdate(vesselId, vessel, (key, existingVal) => vessel);
         }
     });
 }