Esempio n. 1
0
        public static MeshCollisionEntry Deserialize(FZReader reader)
        {
            var entry = new MeshCollisionEntry();

            entry.unknown1 = reader.ReadBytes(12);
            entry.offset   = reader.ReadInt32();
            if (entry.offset != 0)
            {
                entry.meshCollision = reader.ReadAtOffset(entry.offset, MeshCollisionData.Deserialize);
            }

            return(entry);
        }
Esempio n. 2
0
        public static Triangle Deserialize(FZReader reader)
        {
            var obj = new Triangle();

            obj.address  = (int)reader.BaseStream.Position;
            obj.unknown1 = reader.ReadInt32();
            obj.normal   = reader.ReadVector3();
            obj.vertex1  = reader.ReadVector3();
            obj.vertex2  = reader.ReadVector3();
            obj.vertex3  = reader.ReadVector3();
            obj.unknown2 = reader.ReadBytes(36);

            return(obj);
        }
Esempio n. 3
0
        public static MeshCollisionData Deserialize(FZReader reader)
        {
            var obj = new MeshCollisionData();

            obj.address         = (int)reader.BaseStream.Position;
            obj.unknown1        = reader.ReadBytes(20);
            obj.numTriangles    = reader.ReadInt32();
            obj.numQuads        = reader.ReadInt32();
            obj.trianglesOffset = reader.ReadInt32();
            obj.quadsOffset     = reader.ReadInt32();
            obj.triangles       = reader.ReadArrayAtOffset(obj.trianglesOffset, obj.numTriangles, Triangle.Deserialize);
            obj.quads           = reader.ReadArrayAtOffset(obj.quadsOffset, obj.numQuads, Quad.Deserialize);

            return(obj);
        }
Esempio n. 4
0
        public static ObjectCollisionData Deserialize(FZReader reader)
        {
            var table = new ObjectCollisionData();

            table.address             = (int)reader.BaseStream.Position;
            table.unknown1            = reader.ReadBytes(36);
            table.startTriangleOffset = reader.ReadInt32();
            table.nextTriangleOffset  = reader.ReadInt32();

            var numTriangles = (table.nextTriangleOffset - table.startTriangleOffset - triangleExtraDataSize) / triangleSize;

            table.triangles = new Triangle[numTriangles];
            reader.BaseStream.Seek(table.startTriangleOffset, SeekOrigin.Begin);
            for (var i = 0; i < numTriangles; i++)
            {
                table.triangles[i] = Triangle.Deserialize(reader);
            }

            table.triangleExtraData = TriangleExtraData.Deserialize(reader);

            var quadOffset = 36 + 60 + 24;                                        // 36 null bytes, 60 offset bytes for triangle mesh section, and 24 bytes of unknown data to get to the offset for the first quad mesh

            reader.BaseStream.Seek(table.address + quadOffset, SeekOrigin.Begin); // Go to start of extra mesh table
            table.startQuadOffset = reader.ReadInt32();
            table.nextQuadOffset  = reader.ReadInt32();

            var numQuads = (table.nextQuadOffset - table.startQuadOffset - 24) / quadSize;

            table.quads = new Quad[numQuads];
            reader.BaseStream.Seek(table.startQuadOffset, SeekOrigin.Begin);
            for (var i = 0; i < numQuads; i++)
            {
                table.quads[i] = Quad.Deserialize(reader);
            }

            table.quadExtraData = QuadExtraData.Deserialize(reader);

            return(table);
        }