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 + "\".");
            }
        }
Пример #2
0
 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));
     }
 }
Пример #3
0
 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);
         }
     }
 }
Пример #4
0
 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 + "\".");
     }
 }