private static SerializableProperties GetSerializableProperties(TypeInfo type)
        {
            if (SerializablePropertiesByType.TryGetValue(type, out var properties))
            {
                return(properties);
            }

            var dataContract = type.GetCustomAttribute(typeof(XmlSerializableDataContractAttribute)) as XmlSerializableDataContractAttribute;
            var enableCamelCaseNameCompat = dataContract == null ? false : dataContract.EnableCamelCaseNameCompat;

            var declaredProperties = new List <SerializableProperty>();

            foreach (var declaredProperty in type.DeclaredProperties)
            {
                if (declaredProperty.GetCustomAttribute(typeof(XmlIgnoreAttribute)) != null)
                {
                    continue;
                }

                if (declaredProperty.SetMethod == null)
                {
                    continue;
                }

                var dataMember = declaredProperty.GetCustomAttribute(typeof(DataMemberAttribute)) as DataMemberAttribute;
                if (dataMember == null)
                {
                    continue;
                }

                var shouldSerializeMethodName = string.Concat("ShouldSerialize", declaredProperty.Name);
                var shouldSerializeMethod     = type.GetDeclaredMethod(shouldSerializeMethodName);

                declaredProperties.Add(new SerializableProperty(declaredProperty, dataMember, shouldSerializeMethod, enableCamelCaseNameCompat));
            }

            var inheritedProperties = Enumerable.Empty <SerializableProperty>();

            if (type.BaseType != typeof(object))
            {
                inheritedProperties = GetSerializableProperties(type.BaseType.GetTypeInfo()).EnumeratedInOrder;
            }

            var serializableProperties = new SerializableProperties(declaredProperties, inheritedProperties);

            return(SerializablePropertiesByType.GetOrAdd(type, serializableProperties));
        }
Beispiel #2
0
 public virtual void Load(XElement componentElement)
 {
     if (componentElement == null)
     {
         return;
     }
     foreach (XAttribute attribute in componentElement.Attributes())
     {
         if (!SerializableProperties.TryGetValue(attribute.Name.ToString().ToLowerInvariant(), out SerializableProperty property))
         {
             continue;
         }
         property.TrySetValue(this, attribute.Value);
     }
     ParseMsg();
     OverrideRequiredItems(componentElement);
 }
        private void UpdateSignals(string[] newSignals)
        {
            signals = new string[customInterfaceElementList.Count];
            for (int i = 0; i < customInterfaceElementList.Count; i++)
            {
                var element = customInterfaceElementList[i];
                if (i < newSignals.Length)
                {
                    var newSignal = newSignals[i];
                    signals[i] = newSignal;
                    element.ShouldSetProperty = element.Signal != newSignal;
                    element.Signal            = newSignal;
                }
                else
                {
                    signals[i] = element.Signal;
                }

                if (element.HasPropertyName && element.ShouldSetProperty)
                {
                    if (element.TargetOnlyParentProperty)
                    {
                        if (SerializableProperties.ContainsKey(element.PropertyName))
                        {
                            SerializableProperties[element.PropertyName].TrySetValue(this, element.Signal);
                        }
                    }
                    else
                    {
                        foreach (var po in item.AllPropertyObjects)
                        {
                            if (!po.SerializableProperties.ContainsKey(element.PropertyName))
                            {
                                continue;
                            }
                            po.SerializableProperties[element.PropertyName].TrySetValue(po, element.Signal);
                        }
                    }
                    customInterfaceElementList[i].ShouldSetProperty = false;
                }
            }
            UpdateSignalsProjSpecific();
        }
Beispiel #4
0
        public virtual void Load(XElement componentElement, bool usePrefabValues)
        {
            if (componentElement != null && !usePrefabValues)
            {
                foreach (XAttribute attribute in componentElement.Attributes())
                {
                    if (!SerializableProperties.TryGetValue(attribute.Name.ToString().ToLowerInvariant(), out SerializableProperty property))
                    {
                        continue;
                    }
                    property.TrySetValue(this, attribute.Value);
                }
                ParseMsg();
                OverrideRequiredItems(componentElement);
            }

            if (item.Submarine != null)
            {
                SerializableProperty.UpgradeGameVersion(this, originalElement, item.Submarine.Info.GameVersion);
            }
        }
Beispiel #5
0
        private float GetSoundVolume(ItemSound sound)
        {
            if (sound == null)
            {
                return(0.0f);
            }
            if (sound.VolumeProperty == "")
            {
                return(sound.VolumeMultiplier);
            }

            if (SerializableProperties.TryGetValue(sound.VolumeProperty, out SerializableProperty property))
            {
                float newVolume = 0.0f;
                try
                {
                    newVolume = (float)property.GetValue(this);
                }
                catch
                {
                    return(0.0f);
                }
                newVolume *= sound.VolumeMultiplier;

                if (!MathUtils.IsValid(newVolume))
                {
                    DebugConsole.Log("Invalid sound volume (item " + item.Name + ", " + GetType().ToString() + "): " + newVolume);
                    GameAnalyticsManager.AddErrorEventOnce(
                        "ItemComponent.PlaySound:" + item.Name + GetType().ToString(),
                        GameAnalyticsSDK.Net.EGAErrorSeverity.Error,
                        "Invalid sound volume (item " + item.Name + ", " + GetType().ToString() + "): " + newVolume);
                    return(0.0f);
                }

                return(MathHelper.Clamp(newVolume, 0.0f, 1.0f));
            }

            return(0.0f);
        }
 private void ValueChanged(CustomInterfaceElement numberInputElement, int value)
 {
     if (numberInputElement == null)
     {
         return;
     }
     numberInputElement.Signal = value.ToString();
     if (!numberInputElement.TargetOnlyParentProperty)
     {
         foreach (ISerializableEntity e in item.AllPropertyObjects)
         {
             if (!e.SerializableProperties.ContainsKey(numberInputElement.PropertyName))
             {
                 continue;
             }
             e.SerializableProperties[numberInputElement.PropertyName].TrySetValue(e, value);
         }
     }
     else if (SerializableProperties.ContainsKey(numberInputElement.PropertyName))
     {
         SerializableProperties[numberInputElement.PropertyName].TrySetValue(this, value);
     }
 }
 private void TextChanged(CustomInterfaceElement textElement, string text)
 {
     if (textElement == null)
     {
         return;
     }
     textElement.Signal = text;
     if (!textElement.TargetOnlyParentProperty)
     {
         foreach (ISerializableEntity e in item.AllPropertyObjects)
         {
             if (!e.SerializableProperties.ContainsKey(textElement.PropertyName))
             {
                 continue;
             }
             e.SerializableProperties[textElement.PropertyName].TrySetValue(e, text);
         }
     }
     else if (SerializableProperties.ContainsKey(textElement.PropertyName))
     {
         SerializableProperties[textElement.PropertyName].TrySetValue(this, text);
     }
 }
Beispiel #8
0
        private void PromoteProperties(Stream streamResult, MessageItem messageItem, bool invalidAnnotationToken)
        {
            foreach (ISerializableProperty serializableProperty in SerializableProperties.DeserializeFrom(streamResult))
            {
                this.diagnosticsSession.TraceDebug <SerializablePropertyId>("Setting property {0}", serializableProperty.Id);
                switch (serializableProperty.Id)
                {
                case SerializablePropertyId.AnnotationToken:
                {
                    SerializableStreamProperty serializableStreamProperty = (SerializableStreamProperty)serializableProperty;
                    if (invalidAnnotationToken)
                    {
                        this.diagnosticsSession.TraceDebug("Skip promoting invalid annotation token", new object[0]);
                        serializableStreamProperty.CopyTo(Stream.Null);
                        continue;
                    }
                    using (Stream stream = messageItem.OpenPropertyStream(ItemSchema.AnnotationToken, PropertyOpenMode.Create))
                    {
                        serializableStreamProperty.CopyTo(stream);
                        this.diagnosticsSession.TraceDebug <long>("Bytes written: {0}", stream.Position);
                        continue;
                    }
                    break;
                }

                case SerializablePropertyId.Tasks:
                    break;

                case (SerializablePropertyId)3:
                case (SerializablePropertyId)7:
                case (SerializablePropertyId)8:
                    continue;

                case SerializablePropertyId.Meetings:
                {
                    string text = messageItem.TryGetProperty(StoreObjectSchema.ItemClass) as string;
                    if (text == null || !ObjectClass.IsMeetingMessage(text))
                    {
                        messageItem.SafeSetProperty(ItemSchema.XmlExtractedMeetings, serializableProperty.Value);
                        continue;
                    }
                    continue;
                }

                case SerializablePropertyId.Addresses:
                    messageItem.SafeSetProperty(ItemSchema.XmlExtractedAddresses, serializableProperty.Value);
                    continue;

                case SerializablePropertyId.Keywords:
                    messageItem.SafeSetProperty(ItemSchema.XmlExtractedKeywords, serializableProperty.Value);
                    continue;

                case SerializablePropertyId.Phones:
                    messageItem.SafeSetProperty(ItemSchema.XmlExtractedPhones, serializableProperty.Value);
                    continue;

                case SerializablePropertyId.Emails:
                    messageItem.SafeSetProperty(ItemSchema.XmlExtractedEmails, serializableProperty.Value);
                    continue;

                case SerializablePropertyId.Urls:
                    messageItem.SafeSetProperty(ItemSchema.XmlExtractedUrls, serializableProperty.Value);
                    continue;

                case SerializablePropertyId.Contacts:
                    messageItem.SafeSetProperty(ItemSchema.XmlExtractedContacts, serializableProperty.Value);
                    continue;

                case SerializablePropertyId.Language:
                    this.diagnosticsSession.TraceDebug("Detected language: {0}", new object[]
                    {
                        serializableProperty.Value
                    });
                    messageItem.SafeSetProperty(ItemSchema.DetectedLanguage, serializableProperty.Value);
                    continue;

                default:
                    continue;
                }
                messageItem.SafeSetProperty(ItemSchema.XmlExtractedTasks, serializableProperty.Value);
            }
        }