using System.Collections.Generic; using System.Diagnostics; using System.IO; namespace OpenVIII.Battle.Dat { /// /// Section 2b: Object Data /// /// public class Object { #region Fields public readonly ushort CQuads; public readonly ushort CTriangles; public readonly ushort CVertices; public readonly ulong Padding; public readonly IReadOnlyList Quads; public readonly IReadOnlyList Triangles; public readonly IReadOnlyList VertexData; #endregion Fields #region Constructors private Object(BinaryReader br) { CVertices = br.ReadUInt16(); VertexData = Dat.VertexData.CreateInstances(br, CVertices); //padding br.BaseStream.Seek(4 - (br.BaseStream.Position % 4 == 0 ? 4 : br.BaseStream.Position % 4), SeekOrigin.Current); CTriangles = br.ReadUInt16(); CQuads = br.ReadUInt16(); Padding = br.ReadUInt64(); Debug.Assert(Padding == 0); if (CTriangles == 0 && CQuads == 0) return; Triangles = Triangle.CreateInstances(br, CTriangles); Quads = Quad.CreateInstances(br, CQuads); } #endregion Constructors #region Methods public static Object CreateInstance(BinaryReader br, long byteOffset) { br.BaseStream.Seek(byteOffset, SeekOrigin.Begin); return new Object(br); } #endregion Methods } }