DatHeader.cs 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. namespace OpenVIII.Battle.Dat
  6. {
  7. /// <summary>
  8. /// Dat file header based on monster's 11 sections
  9. /// </summary>
  10. /// <see cref="http://wiki.ffrtt.ru/index.php/FF8/FileFormat_DAT#Header"/>
  11. public struct DatHeader : IReadOnlyList<uint>
  12. {
  13. #region Fields
  14. public readonly uint Eof;
  15. private readonly IReadOnlyList<uint> _pSections;
  16. #endregion Fields
  17. #region Constructors
  18. private DatHeader(BinaryReader br)
  19. {
  20. var cSections = br.ReadInt32();
  21. _pSections = Enumerable.Range(0, cSections).Select(_ => br.ReadUInt32()).ToArray();
  22. Eof = br.ReadUInt32();
  23. }
  24. #endregion Constructors
  25. #region Properties
  26. public int Count => _pSections.Count;
  27. #endregion Properties
  28. #region Indexers
  29. public uint this[int index] => _pSections[index];
  30. #endregion Indexers
  31. #region Methods
  32. public static DatHeader CreateInstance(BinaryReader br) => new DatHeader(br);
  33. public IEnumerator<uint> GetEnumerator() => _pSections.GetEnumerator();
  34. IEnumerator IEnumerable.GetEnumerator() => ((IEnumerable)_pSections).GetEnumerator();
  35. #endregion Methods
  36. }
  37. }