ZellLimitBreakParameters.cs 1.1 KB

123456789101112131415161718192021222324252627282930313233
  1. using System.Collections.Generic;
  2. using System.IO;
  3. using System.Linq;
  4. using System.Runtime.InteropServices;
  5. namespace OpenVIII
  6. {
  7. namespace Kernel
  8. {
  9. /// <summary>
  10. /// Zell Limit Break Parameters
  11. /// </summary>
  12. /// <see cref="https://github.com/alexfilth/doomtrain/wiki/Zell-limit-break-parameters"/>
  13. [StructLayout(LayoutKind.Explicit, Size = Size, Pack = 0)]
  14. public sealed class ZellLimitBreakParameters
  15. {
  16. private static ZellLimitBreakParameters CreateInstance(BinaryReader br) => new ZellLimitBreakParameters(br);
  17. public const int Count = 24;
  18. public const int ID = 23;
  19. public const int Size = 4;
  20. [field: FieldOffset(0x0)]
  21. [field: MarshalAs(UnmanagedType.ByValArray, SizeConst = Size)]
  22. public IReadOnlyList<byte> Moves { get; }
  23. private ZellLimitBreakParameters(BinaryReader br) => Moves = br.ReadBytes(Size);
  24. public static IReadOnlyList<ZellLimitBreakParameters> Read(BinaryReader br)
  25. => Enumerable.Range(0, Count).Select(_ => CreateInstance(br)).ToList();
  26. }
  27. }
  28. }