/// <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); }