public override void ReadPointerData(Vault vault, BinaryReader br) { br.BaseStream.Position = _definitionsPtr; for (int i = 0; i < NumDefinitions; i++) { AttribDefinition definition = new AttribDefinition(); definition.Read(vault, br); if ((definition.Flags & DefinitionFlags.IsStatic) != 0) { throw new Exception("Legacy format does not support static fields"); } VltClassField field = new VltClassField( definition.Key, HashManager.ResolveVLT((uint)definition.Key), HashManager.ResolveVLT((uint)definition.Type), definition.Flags, definition.Alignment, definition.Size, definition.MaxCount, definition.Offset); Class.Fields.Add(definition.Key, field); } vault.Database.AddClass(Class); }
public override void ReadPointerData(Vault vault, BinaryReader br) { br.BaseStream.Position = _definitionsPtr; for (int i = 0; i < NumDefinitions; i++) { AttribDefinition definition = new AttribDefinition(); definition.Read(vault, br); VltClassField field = new VltClassField( definition.Key, HashManager.ResolveVLT((uint)definition.Key), HashManager.ResolveVLT((uint)definition.Type), definition.Flags, definition.Alignment, definition.Size, definition.MaxCount, definition.Offset); Class.Fields.Add(definition.Key, field); //field.Key = definition.Key; //field.Name = HashManager.ResolveVLT((uint) definition.Key); //field.TypeName = HashManager.ResolveVLT((uint) definition.Type); //field.Flags = definition.Flags; //field.Size = definition.Size; //field.MaxCount = definition.MaxCount; //field.Offset = definition.Offset; //field.Alignment = definition.Alignment; //Class.Fields.Add(definition.Key, field); } if (_staticDataPtr != 0) { br.BaseStream.Position = _staticDataPtr; foreach (VltClassField staticField in Class.StaticFields) { br.AlignReader(staticField.Alignment); VLTBaseType staticData = TypeRegistry.CreateInstance(vault.Database.Options.GameId, Class, staticField, null); staticData.Read(vault, br); staticField.StaticValue = staticData; } } foreach (var staticField in Class.StaticFields) { if (staticField.StaticValue is IPointerObject pointerObject) { pointerObject.ReadPointerData(vault, br); } } vault.Database.AddClass(Class); }
public override void WritePointerData(Vault vault, BinaryWriter bw) { _dstDefinitionsPtr = bw.BaseStream.Position; foreach (var field in Class.Fields.Values) { AttribDefinition definition = new AttribDefinition(); definition.Key = VLT32Hasher.Hash(field.Name); definition.Type = VLT32Hasher.Hash(field.TypeName); definition.Flags = field.Flags; definition.Size = field.Size; definition.MaxCount = field.MaxCount; definition.Offset = field.Offset; definition.Alignment = field.Alignment; definition.Write(vault, bw); } }
public override void WritePointerData(Vault vault, BinaryWriter bw) { _dstDefinitionsPtr = bw.BaseStream.Position; foreach (var field in Class.Fields.Values) { AttribDefinition definition = new AttribDefinition(); definition.Key = VLT32Hasher.Hash(field.Name); definition.Alignment = field.Alignment; definition.Flags = field.Flags; definition.MaxCount = field.MaxCount; definition.Offset = field.Offset; definition.Size = field.Size; definition.Type = VLT32Hasher.Hash(field.TypeName); definition.Write(vault, bw); } if (_srcStaticPtr != 0) { bw.AlignWriter(0x10); _dstStaticPtr = bw.BaseStream.Position; foreach (var staticField in Class.StaticFields) { bw.AlignWriter(staticField.Alignment); staticField.StaticValue.Write(vault, bw); } foreach (var staticField in Class.StaticFields) { if (staticField.StaticValue is IPointerObject pointerObject) { pointerObject.WritePointerData(vault, bw); } } } }