def __init__(self, reader: BinaryStream):
        if reader.version < Versions.VER_UE4_SUPPORT_32BIT_STATIC_MESH_INDICES:
            self.indices16 = reader.readBulkTArray(reader.readUInt16)
            self.indices32 = []
        else:
            is32bit = reader.readBool()
            data = bytearray(reader.readBulkTArray(reader.readInt8))

            tr = BinaryStream(data)
            tr.game = reader.game
            tr.version = reader.version

            if reader.game >= GAME_UE4(25):
                reader.readBool()

            if len(data) == 0:
                self.indices16 = []
                self.indices32 = []
                return

            if is32bit:
                count = int(len(data) / 4)
                self.indices32 = [tr.readUInt32() for _ in range(count)]
                self.indices16 = []
            else:
                count = int(len(data) / 2)
                self.indices16 = [tr.readUInt16() for _ in range(count)]
                self.indices32 = []
Example #2
0
    def __init__(self, reader: BinaryStream):
        self.stripFlags = FStripDataFlags(reader)
        self.sections = reader.readTArray_W_Arg(FStaticMeshSection, reader)
        self.maxDeviation = reader.readFloat()

        if reader.game < GAME_UE4(23):
            if not self.stripFlags.isDataStrippedForServer(
            ) and not self.stripFlags.isClassDataStripped(CDSF_MinLodData):
                self.serializeBuffer_legacy(reader)
            return

        self.is_lod_cooked_out = reader.readBool()
        self.inlined = reader.readBool()

        if not self.stripFlags.isDataStrippedForServer(
        ) and not self.is_lod_cooked_out:
            pos = reader.tellfake()
            if self.inlined:
                self.serializeBuffer(reader)
            else:
                bulk: FByteBulkData = FByteBulkData(
                    reader,
                    ubulk=reader.ubulk_stream,
                    bulkOffset=reader.PackageReader.PackageFileSummary.
                    BulkDataStartOffset)
                if bulk.Header.ElementCount > 0:
                    tr = BinaryStream(bulk.Data)
                    tr.game = reader.game
                    tr.version = reader.version
                    self.serializeBuffer(tr)

                reader.readUInt32()  # DepthOnlyNumTriangles
                reader.readUInt32()  # PackedData
                reader.seek(4 * 4 + 2 * 4 + 2 * 4 + 6 * (2 * 4), 1)
                """
                            StaticMeshVertexBuffer = 2x int32, 2x bool
                            PositionVertexBuffer = 2x int32
                            ColorVertexBuffer = 2x int32
                            IndexBuffer = int32 + bool
                            ReversedIndexBuffer
                            DepthOnlyIndexBuffer
                            ReversedDepthOnlyIndexBuffer
                            WireframeIndexBuffer
                            AdjacencyIndexBuffer
                """
        # FStaticMeshBuffersSize
        reader.readUInt32()  # SerializedBuffersSize
        reader.readUInt32()  # DepthOnlyIBSize
        reader.readUInt32()  # ReversedIBsSize