MSK.cs 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. using Microsoft.Xna.Framework;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.IO;
  5. using System.Linq;
  6. namespace OpenVIII.Fields
  7. {
  8. /// <summary>
  9. /// Movie Cam?
  10. /// </summary>
  11. /// <see cref="http://wiki.ffrtt.ru/index.php?title=FF8/FileFormat_MSK"/>
  12. public class MSK : IReadOnlyList<Vector3>
  13. {
  14. #region Fields
  15. private readonly IReadOnlyList<Vector3> _camPositions;
  16. #endregion Fields
  17. #region Constructors
  18. public MSK(byte[] mskB)
  19. {
  20. if (mskB == null || mskB.Length <= 4) return;
  21. using (var br = new BinaryReader(new MemoryStream(mskB)))
  22. _camPositions = Enumerable.Range(0, br.ReadInt32())
  23. .Select(_ => new Vector3(br.ReadInt16(), br.ReadInt16(), br.ReadInt16())).ToList().AsReadOnly();
  24. }
  25. #endregion Constructors
  26. #region Properties
  27. public int Count => _camPositions.Count;
  28. #endregion Properties
  29. #region Indexers
  30. public Vector3 this[int index] => _camPositions[index];
  31. #endregion Indexers
  32. #region Methods
  33. public IEnumerator<Vector3> GetEnumerator() => _camPositions.GetEnumerator();
  34. IEnumerator IEnumerable.GetEnumerator() => _camPositions.GetEnumerator();
  35. #endregion Methods
  36. }
  37. }