コード例 #1
0
    def LoadAndParseAniFile(self):
        self.AniHeader.Signature = binaryreader.ReadUInt(
            self.AniFileStream, 1)[0]
        self.AniHeader.Version = binaryreader.ReadUInt(self.AniFileStream,
                                                       1)[0]
        self.AniHeader.MaxFrame = binaryreader.ReadInt(self.AniFileStream,
                                                       1)[0]
        self.AniHeader.ModelNum = binaryreader.ReadInt(self.AniFileStream,
                                                       1)[0]
        # self.AniHeader.AniType = binaryreader.ReadInt(self.AniFileStream, 1)[0]
        self.AniHeader.AniType = EAnimationType(
            binaryreader.ReadInt(self.AniFileStream, 1)[0])

        print("Ani Version: {0}, ani maxframe: {1}, ani anitype: {2}".format(
            self.AniHeader.Version, self.AniHeader.MaxFrame,
            self.AniHeader.AniType))

        globalvars.CurrentAniFileVersion = self.AniHeader.Version

        if self.AniHeader.Version != raidflags.EXPORTER_CURRENT_ANI_VER:
            # @todo add warning - ani not latest version
            pass

        LoaderObj = None
        if globalvars.CurrentAniFileVersion == raidflags.EXPORTER_ANI_VER12:
            LoaderObj = aniparser.FAniFileLoaderImpl_v12()
        elif globalvars.CurrentAniFileVersion == raidflags.EXPORTER_ANI_VER11:
            LoaderObj = aniparser.FAniFileLoaderImpl_v11()
        elif globalvars.CurrentAniFileVersion == raidflags.EXPORTER_ANI_VER9:
            LoaderObj = aniparser.FAniFileLoaderImpl_v9()
        elif globalvars.CurrentAniFileVersion == raidflags.EXPORTER_ANI_VER8:
            LoaderObj = aniparser.FAniFileLoaderImpl_v7()
        elif globalvars.CurrentAniFileVersion == raidflags.EXPORTER_ANI_VER7:
            LoaderObj = aniparser.FAniFileLoaderImpl_v7()
        elif globalvars.CurrentAniFileVersion == raidflags.EXPORTER_ANI_VER6:
            LoaderObj = aniparser.FAniFileLoaderImpl_v6()
        else:
            # @todo ani version error
            pass

        for i in range(self.AniHeader.ModelNum):
            AniNode = FAniNode()
            if self.AniHeader.AniType == EAnimationType.RAniType_Vertex:
                # if self.AniHeader.AniType == 1:
                LoaderObj.LoadVertexAni(AniNode, self.AniFileStream)
            elif self.AniHeader.AniType == EAnimationType.RAniType_Bone:
                # elif self.AniHeader.AniType == 2:
                LoaderObj.LoadBoneAni(AniNode, self.AniFileStream)
                if AniNode.Name == "Bip01":
                    self.AniRootNode = AniNode
            else:
                # @todo
                pass
            LoaderObj.LoadVisibilityKey(AniNode, self.AniFileStream)
            self.AniMeshNodes.append(AniNode)
        return
コード例 #2
0
ファイル: eluparser.py プロジェクト: webdes27/raiderz-library
    def LoadVertex(self, Node, FileStream, Offset):
        try:
            dwFVF = binaryreader.ReadUInt(FileStream, 1)[0]
            LightMapID = binaryreader.ReadInt(FileStream, 1)[0]

            Node.PointsCount = binaryreader.ReadInt(FileStream, 1)[0]
            for i in range(Node.PointsCount):
                Vec = datatypes.FVector(binaryreader.ReadFloat(FileStream, 3))
                Node.PointsTable.append(Vec)

            if Node.PointsCount:
                Node.CalculateLocalBoundingBox()

            Node.NormalsCount = binaryreader.ReadInt(FileStream, 1)[0]
            for i in range(Node.NormalsCount):
                Vec = datatypes.FVector(binaryreader.ReadFloat(FileStream, 3))
                Node.NormalsTable.append(Vec)

            Node.TangentTanCount = binaryreader.ReadInt(FileStream, 1)[0]
            for i in range(Node.TangentTanCount):
                Vec = datatypes.FVector4(binaryreader.ReadFloat(FileStream, 4))
                Node.TangentTanTable.append(Vec)

            Node.TangentBinCount = binaryreader.ReadInt(FileStream, 1)[0]
            for i in range(Node.TangentBinCount):
                Vec = datatypes.FVector(binaryreader.ReadFloat(FileStream, 3))
                Node.TangentBinTable.append(Vec)

            Node.TexCoordCount = binaryreader.ReadInt(FileStream, 1)[0]
            for i in range(Node.TexCoordCount):
                Vec = datatypes.FVector(binaryreader.ReadFloat(FileStream, 3))
                Node.TexCoordTable.append(Vec)

        except struct.error as err:
            errorhandling.HandleStructUnpackError(err)
コード例 #3
0
    def LoadAndParseEluFile(self):
        self.EluHeader.Signature = binaryreader.ReadUInt(
            self.EluFileStream, 1)[0]
        self.EluHeader.Version = binaryreader.ReadUInt(self.EluFileStream,
                                                       1)[0]
        self.EluHeader.MaterialNum = binaryreader.ReadInt(
            self.EluFileStream, 1)[0]
        self.EluHeader.MeshNum = binaryreader.ReadInt(self.EluFileStream, 1)[0]
        globalvars.CurrentEluFileVersion = self.EluHeader.Version

        if self.EluHeader.Signature != raidflags.EXPORTER_SIG:
            # @todo add signature error
            pass

        if self.EluHeader.Version != raidflags.EXPORTER_CURRENT_MESH_VER:
            # @todo add warning -  elu not latest version
            pass

        LoaderObj = None
        if globalvars.CurrentEluFileVersion == raidflags.EXPORTER_MESH_VER20:
            LoaderObj = eluparser.FEluNodeLoaderImpl_v20()
        elif globalvars.CurrentEluFileVersion == raidflags.EXPORTER_MESH_VER18:
            LoaderObj = eluparser.FEluNodeLoaderImpl_v18()
        elif globalvars.CurrentEluFileVersion == raidflags.EXPORTER_MESH_VER17:
            LoaderObj = eluparser.FEluNodeLoaderImpl_v17()
        elif globalvars.CurrentEluFileVersion == raidflags.EXPORTER_MESH_VER16:
            LoaderObj = eluparser.FEluNodeLoaderImpl_v16()
        elif globalvars.CurrentEluFileVersion == raidflags.EXPORTER_MESH_VER15:
            LoaderObj = eluparser.FEluNodeLoaderImpl_v15()
        elif globalvars.CurrentEluFileVersion == raidflags.EXPORTER_MESH_VER14:
            LoaderObj = eluparser.FEluNodeLoaderImpl_v14()
        elif globalvars.CurrentEluFileVersion == raidflags.EXPORTER_MESH_VER13:
            LoaderObj = eluparser.FEluNodeLoaderImpl_v13()
        elif globalvars.CurrentEluFileVersion == raidflags.EXPORTER_MESH_VER12:
            LoaderObj = eluparser.FEluNodeLoaderImpl_v12()
        else:
            # @todo elu version error
            pass

        for i in range(self.EluHeader.MeshNum):
            EluNode = FEluNode()
            LoaderObj.Load(EluNode, self.EluFileStream)
            self.EluMeshNodes.append(EluNode)
        return
コード例 #4
0
ファイル: eluparser.py プロジェクト: webdes27/raiderz-library
    def LoadInfo(self, Node, FileStream, Offset):
        try:
            Node.LocalMatrix = datatypes.FMatrix(
                binaryreader.ReadFloat(FileStream, 16))

            Node.BaseVisibility = binaryreader.ReadFloat(FileStream, 1)[0]
            Node.dwFlag = binaryreader.ReadUInt(FileStream, 1)[0]
            try:
                Node.MeshAlign = datatypes.RMeshAlign(
                    binaryreader.ReadInt(FileStream, 1)[0])
            except ValueError as er:
                Message = "Node.MeshAlign value is out of allowed range."
                filelogger.AddLog(globalvars.LogFileStream, Message,
                                  filelogger.LogType.LogType_Warning)
            Node.LODProjectIndex = binaryreader.ReadInt(FileStream, 1)[0]

        except struct.error as err:
            errorhandling.HandleStructUnpackError(err)
コード例 #5
0
    def LoadVertexAni(self, Node, FileStream, Offset=None):
        try:
            Node.Name = binaryreader.ReadWord(FileStream)
            Node.VertexCount = binaryreader.ReadInt(FileStream, 1)[0]
            print("Vertex Count: ", Node.VertexCount)
            Node.Vertex_V_Count = binaryreader.ReadInt(FileStream, 1)[0]
            print("Vertex V Count: ", Node.Vertex_V_Count)
            # if Node.VertexCount > 0:
            for i in range(Node.VertexCount):
                VertFrame = binaryreader.ReadUInt(FileStream, 1)[0]
                Node.VertexFrame.append(VertFrame)
            
            for i in range(Node.VertexCount):
                Node.VertexTable.append([])
                for j in range(Node.Vertex_V_Count):
                    Vec = datatypes.FVector(binaryreader.ReadFloat(FileStream, 3))
                    Node.VertexTable[i].append(Vec)

            self.LoadVertexAniBoundingBox(Node, FileStream)
        except struct.error as err:
            errorhandling.HandleStructUnpackError(err)
コード例 #6
0
ファイル: eluparser.py プロジェクト: webdes27/raiderz-library
    def LoadInfo(self, Node, FileStream, Offset):
        try:
            Node.dwFlag = binaryreader.ReadUInt(FileStream, 1)[0]
            try:
                Node.MeshAlign = datatypes.RMeshAlign(
                    binaryreader.ReadInt(FileStream, 1)[0])
            except ValueError as er:
                Message = "Node.MeshAlign value is out of allowed range."
                filelogger.AddLog(globalvars.LogFileStream, Message,
                                  filelogger.LogType.LogType_Warning)

            if globalvars.CurrentEluFileVersion < raidflags.EXPORTER_MESH_VER11:
                # Unused data
                AniPartsType = binaryreader.ReadInt(FileStream, 1)[0]
                PartsPosInfoType = binaryreader.ReadInt(FileStream, 1)[0]
                PartsType = binaryreader.ReadInt(FileStream, 1)[0]

            Node.LocalMatrix = datatypes.FMatrix(
                binaryreader.ReadFloat(FileStream, 16))
            if globalvars.CurrentEluFileVersion >= raidflags.EXPORTER_MESH_VER11:
                Node.BaseVisibility = binaryreader.ReadInt(FileStream, 1)[0]

        except struct.error as err:
            errorhandling.HandleStructUnpackError(err)