Ejemplo n.º 1
0
    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 = []
Ejemplo n.º 2
0
    def serializeBuffer(self, reader: BinaryStream):
        stripFlags = FStripDataFlags(reader)

        self.positionVertexBuffer = FPositionVertexBuffer(reader)
        self.vertexBuffer = FStaticMeshVertexBuffer(reader)
        self.colorVertexBuffer = FColorVertexBuffer(reader)
        self.indexBuffer = FRawStaticIndexBuffer(reader)

        if not stripFlags.isClassDataStripped(CDSF_ReversedIndexBuffer):
            self.reversedIndexBuffer = FRawStaticIndexBuffer(reader)

        self.depthOnlyIndexBuffer = FRawStaticIndexBuffer(reader)

        if not stripFlags.isClassDataStripped(CDSF_ReversedIndexBuffer):
            self.reversedDepthOnlyIndexBuffer = FRawStaticIndexBuffer(reader)

        if not stripFlags.isEditorDataStripped():
            self.wireframeIndexBuffer = FRawStaticIndexBuffer(reader)

        if not stripFlags.isClassDataStripped(CDSF_AdjancencyData):
            self.adjacencyIndexBuffer = FRawStaticIndexBuffer(reader)

        # UE 4.25+
        if reader.game >= GAME_UE4(25) and not stripFlags.isClassDataStripped(
                CDSF_RaytracingResources):
            reader.readBulkTArray(reader.readByte)  # Raw data

        # 25178
        for i in range(len(self.sections)):
            FWeightedRandomSampler(
                reader)  # FStaticMeshSectionAreaWeightedTriangleSampler
        FWeightedRandomSampler(reader)  # FStaticMeshAreaWeightedSectionSampler
Ejemplo n.º 3
0
 def __init__(self, reader: BinaryStream):
     self.stripFlags = FStripDataFlags(reader, Versions.VER_UE4_STATIC_SKELETAL_MESH_SERIALIZATION_FIX)
     self.stride = reader.readInt32()
     self.numVertices = reader.readInt32()
     if not self.stripFlags.isDataStrippedForServer() and self.numVertices > 0:
         self.data = reader.readBulkTArray(FColor, reader)
     else:
         self.data = []
Ejemplo n.º 4
0
 def __init__(self, reader: BinaryStream):
     self.Stride = reader.readInt32()
     self.NumVertices = reader.readInt32()
     self.Verts = reader.readBulkTArray(FVector, reader)