public virtual void Deserialize(FArchive reader) { foreach (var tag in PropertyTag.ReadToEnd(reader)) { Vars.Add(new TaggedItem(tag.Name, PropertyFactory.Get(reader.Slice(tag.Size), tag))); if (reader.Tell() != tag.PropertyEnd) { Console.WriteLine($"Needed to move by {tag.PropertyEnd - reader.Tell()} for {tag.Name} {(tag.TypeEnum == PropertyTag.PropertyType.StructProperty ? tag.StructName : tag.Type)}"); reader.Seek(tag.PropertyEnd); } } }
public virtual FArchive Serialize(FArchive archive) { foreach (var tag in PropertyTag.ReadToEnd(archive)) { Vars.Add(new TaggedItem(tag.Name, PropertyFactory.Get(archive.SubStream(tag.Size), tag))); if (archive.Tell() != tag.PropertyEnd) { Debug.WriteLine($"Needed to move by {tag.PropertyEnd - archive.Tell()} for {tag.Name} {(tag.TypeEnum == PropertyTag.PropertyType.StructProperty ? tag.StructName : tag.Type)}"); archive.Seek(tag.PropertyEnd); } } return(archive); }
public override void Deserialize(FArchive reader, PropertyTag tag) { reader.Read(out int unknown); base.Deserialize(reader, tag); if (tag.InnerTypeEnum.TryGetAttribute(out LinkedTypeAttribute? attrib)) { _value = new HashSet <IProperty>(Count); var func = PropertyFactory.Get(attrib.LinkedType); for (int i = 0; i < Count; i++) { var prop = func(); prop.Deserialize(reader, tag); _value.Add(prop); } } }
public override void Deserialize(FArchive reader, PropertyTag tag) { if (tag.InnerTypeEnum.TryGetAttribute(out LinkedTypeAttribute? innerType) && tag.ValueTypeEnum.TryGetAttribute(out LinkedTypeAttribute? valueType)) { reader.Read(out int unknown); base.Deserialize(reader, tag); var dict = new Dictionary <IProperty, IProperty>(Count); var funcKey = PropertyFactory.Get(innerType.LinkedType); var valueKey = PropertyFactory.Get(valueType.LinkedType); for (int i = 0; i < Count; i++) { var key = funcKey(); key.Deserialize(reader, tag); var value = valueKey(); value.Deserialize(reader, tag); dict.Add(key, value); } _value = dict; } }