SlotArray.cs 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. using System.Collections.Generic;
  2. using System.IO;
  3. using System.Linq;
  4. namespace OpenVIII
  5. {
  6. namespace Kernel
  7. {
  8. /// <summary>
  9. /// Slot Array Data
  10. /// </summary>
  11. /// <see cref="https://github.com/alexfilth/doomtrain/wiki/Slot-array"/>
  12. public sealed class SlotArray
  13. {
  14. #region Fields
  15. public const int Count = 60;
  16. public const int ID = 26;
  17. public const int Size = 1;
  18. #endregion Fields
  19. #region Constructors
  20. private SlotArray(byte slotID) => SlotID = slotID;
  21. #endregion Constructors
  22. #region Properties
  23. public byte SlotID { get; }
  24. #endregion Properties
  25. #region Methods
  26. private static SlotArray CreateInstance(BinaryReader br) => new SlotArray(br.ReadByte());
  27. private static SlotArray CreateInstance(byte slotID) => new SlotArray(slotID);
  28. public static implicit operator byte(SlotArray slotArray) => slotArray.SlotID;
  29. public static implicit operator SlotArray(byte slotID) => CreateInstance(slotID);
  30. public static IReadOnlyList<SlotArray> Read(BinaryReader br) =>
  31. Enumerable.Range(0, Count).Select(x => CreateInstance(br)).ToList().AsReadOnly();
  32. public override string ToString()
  33. {
  34. return $"{SlotID:D2}";
  35. }
  36. #endregion Methods
  37. }
  38. }
  39. }