Esempio n. 1
0
        /// <summary>
        /// Initializes a component's keyvalues from a list of keyvalues
        /// </summary>
        /// <param name="component"></param>
        /// <param name="keyValues"></param>
        public bool InitializeComponent(Component component, IReadOnlyList <KeyValuePair <string, string> > keyValues)
        {
            if (component == null)
            {
                throw new ArgumentNullException(nameof(component));
            }

            if (keyValues == null)
            {
                throw new ArgumentNullException(nameof(keyValues));
            }

            foreach (var keyValue in keyValues)
            {
                if (component.MetaData.KeyValues.TryGetValue(keyValue.Key, out var member))
                {
                    component.MetaData.Accessor[component, member.Member.Name] = member.Converter.FromString(member.MemberType, keyValue.Key, keyValue.Value);
                }

                //Special handling for spawnflags to remap them to booleans
                if (keyValue.Key == "spawnflags")
                {
                    var spawnFlags = KeyValueUtils.ParseInt(keyValue.Value);

                    foreach (var flag in component.MetaData.SpawnFlags)
                    {
                        //All flags are assumed to default to false, so only set to true here
                        if ((flag.Flag & spawnFlags) != 0)
                        {
                            component.MetaData.Accessor[component, flag.Member.Name] = true;
                        }
                    }
                }
            }

            return(true);
        }