protected override void Parse(Stream s) { var br = new BinaryReader(s); if (FOURCC(br.ReadUInt32()) != Tag) { throw new InvalidDataException("Invalid Tag, Expected " + Tag); } mVersion = br.ReadUInt32(); if (mVersion < 0x201) { mUnused = br.ReadBytes(48); } else { mRigKey = new TGIBlock(requestedApiVersion, handler, kRigKeyOrder, s); mVertexAnimBlendWeight = br.ReadSingle(); mUnused = br.ReadBytes(28); } mTrackMasks = new TrackMaskList(handler, s); if (s.Position != s.Length) { throw new InvalidDataException("Unexpected End of File"); } }
public TrackMask(int APIversion, EventHandler handler, uint version, byte[] unused, TrackMaskList trackMasks) : base(APIversion, handler, null) { mVersion = version; mRigKey = new TGIBlock(APIversion, handler, kRigKeyOrder); mUnused = unused ?? (version < 0x201 ? new byte[48] : new byte[28]); mTrackMasks = trackMasks ?? new TrackMaskList(handler); }
public TrackMask(int APIversion, EventHandler handler, uint version, IResourceKey rigKey, float vertexAnimBlendWeight, byte[] unused, TrackMaskList trackMasks) : base(APIversion, handler, null) { mVersion = version; mRigKey = rigKey == null ? new TGIBlock(APIversion, handler, kRigKeyOrder) : new TGIBlock(APIversion, handler, kRigKeyOrder, rigKey); mVertexAnimBlendWeight = vertexAnimBlendWeight; mUnused = unused ?? (version < 0x201 ? new byte[48] : new byte[28]); mTrackMasks = trackMasks ?? new TrackMaskList(handler); }
public override Stream UnParse() { var s = new MemoryStream(); var bw = new BinaryWriter(s); bw.Write((uint)FOURCC(Tag)); bw.Write(mVersion); if (mVersion < 0x201) { if (mUnused == null) { mUnused = new byte[48]; } if (mUnused.Length != 48) { byte[] unused = mUnused; mUnused = new byte[48]; Array.Copy(unused, 0, mUnused, 0, unused.Length < 48 ? unused.Length : 48); } bw.Write(mUnused); } else { if (mRigKey == null) { mRigKey = new TGIBlock(requestedApiVersion, handler, kRigKeyOrder); } mRigKey.UnParse(s); bw.Write(mVertexAnimBlendWeight); if (mUnused == null) { mUnused = new byte[28]; } if (mUnused.Length != 28) { byte[] unused = mUnused; mUnused = new byte[28]; Array.Copy(unused, 0, mUnused, 0, unused.Length < 28 ? unused.Length : 28); } bw.Write(mUnused); } if (mTrackMasks == null) { mTrackMasks = new TrackMaskList(handler); } mTrackMasks.UnParse(s); return(s); }