public override void Write <TItem>(TItem obj, BinaryWriter writer, HashWriter hashWriter) { if (obj is PrimitiveData primitiveData) { if (!primitiveData.Use3DMesh) { // don't write animation if not using 3d mesh return; } for (var i = 0; i < primitiveData.Mesh.AnimationFrames.Count; i++) { var animationData = SerializeAnimation(primitiveData.Mesh.AnimationFrames[i]); var data = IsCompressed ? BiffZlib.Compress(animationData) : animationData; WriteStart(writer, 4, hashWriter, "M3AY"); writer.Write(data.Length); WriteStart(writer, data.Length, hashWriter); writer.Write(data); hashWriter?.Write(data); } } else { throw new InvalidOperationException("Unknown type for [" + GetType().Name + "] on field \"" + Name + "\"."); } }
public override void Parse <T>(T obj, BinaryReader reader, int len) { if (obj is PrimitiveData tableData) { ParseIndices(tableData, IsCompressed ? BiffZlib.Decompress(reader.ReadBytes(len)) : reader.ReadBytes(len)); } }
public override void Parse <T>(T obj, BinaryReader reader, int len) { if (obj is PrimitiveData primitiveData) { try { ParseVertices(primitiveData, IsCompressed ? BiffZlib.Decompress(reader.ReadBytes(len)) : reader.ReadBytes(len)); } catch (Exception e) { throw new Exception($"Error parsing vertices for {primitiveData.Name} ({primitiveData.StorageName}).", e); } } }
public override void Write <TItem>(TItem obj, BinaryWriter writer, HashWriter hashWriter) { if (obj is PrimitiveData primitiveData) { if (!primitiveData.Use3DMesh) { return; } var indexData = SerializeIndices(primitiveData); var data = IsCompressed ? BiffZlib.Compress(indexData) : indexData; WriteStart(writer, data.Length, hashWriter); writer.Write(data); hashWriter?.Write(data); } else { throw new InvalidOperationException("Unknown type for [" + GetType().Name + "] on field \"" + Name + "\"."); } }