Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class TextureDatabaseSerial
- {
- [FieldOrder(0)] public int TextureCount;
- [FieldOrder(1)] public int TextureOffest;
- [FieldOrder(2)] public Int64 Reserved;
- [FieldOrder(3), SerializeUntil(0)] public List<string> TextureNames;
- [FieldOrder(4), FieldCount("TextureCount"),FieldOffset("TextureOffest")] public List<TextureEntrySerial> TextureEntries;
- [Ignore] public List<TextureNameEntrySerial> NameEntries { get => TextureEntries.Zip(TextureNames, (e, n) => new TextureNameEntrySerial(e, n)).ToList(); set => ApplyChanges(value); }
- public void SetOffsets()
- {
- var offset = 16;
- for (var i = 0; i < TextureEntries.Count(); ++i)
- {
- offset += i != 0 ? TextureNames[i-1].Length+1 : 0;
- TextureEntries[i].Offset = offset;
- }
- }
- public void ApplyChanges(List<TextureNameEntrySerial> nameEntry = null)
- {
- nameEntry = nameEntry ?? NameEntries;
- TextureNames = nameEntry.Select(entry => entry.Name).ToList();
- TextureEntries = nameEntry.Select(entry => entry.ToEntrySerial()).ToList();
- TextureOffest = TextureNames.Sum(name => name.Length + 1) + 15;
- TextureOffest += 4 - (TextureOffest % 4);
- }
- }
- public class TextureEntrySerial
- {
- [FieldOrder(0)] public int Id;
- [FieldOrder(1)] public int Offset;
- [Ignore] public virtual int Size => 8;
- public TextureEntrySerial(int id, int offset)
- {
- Id = id;
- Offset = offset;
- }
- }
- public class TextureNameEntrySerial : TextureEntrySerial
- {
- public string Name;
- [Ignore] public override int Size => 8 + Name.Count() + 1;
- public TextureNameEntrySerial(TextureEntrySerial entry, string name) : base(entry.Id, entry.Offset) => Name = name;
- public override string ToString() => $"Texture: \"{Name}\" ID {Id} at 0x{Offset:X}";
- public TextureEntrySerial ToEntrySerial() => new TextureEntrySerial(Id, Offset);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement