def LoadBoneAni(self, Node, FileStream, Offset=None):
        try:
            Node.Name = binaryreader.ReadWord(FileStream)
            if globalvars.CurrentAniFileVersion >= raidflags.EXPORTER_ANI_VER6:
                Node.ParentName = binaryreader.ReadWord(FileStream)

            Node.LocalMatrix = datatypes.FMatrix(
                binaryreader.ReadFloat(FileStream, 16))

            PosKeyNum = binaryreader.ReadInt(FileStream, 1)[0]
            if PosKeyNum:
                Node.PositionKeyTrack.Count = PosKeyNum + 1
                for i in range(PosKeyNum):
                    PosKey = datatypes.FVecKey()
                    PosKey.Vector = datatypes.FVector(
                        binaryreader.ReadFloat(FileStream, 3))
                    PosKey.Frame = binaryreader.ReadInt(FileStream, 1)[0]
                    Node.PositionKeyTrack.Data.append(PosKey)
                LastPosKey = Node.PositionKeyTrack.Data[PosKeyNum - 1]
                Node.PositionKeyTrack.Data.append(LastPosKey)

            RotKeyNum = binaryreader.ReadInt(FileStream, 1)[0]
            if RotKeyNum:
                Node.RotationKeyTrack.Count = RotKeyNum + 1
                for i in range(RotKeyNum):
                    QuatKey = datatypes.FQuatKey()
                    QuatKey.Quat = datatypes.FQuaternion(
                        binaryreader.ReadFloat(FileStream, 4))
                    QuatKey.Frame = binaryreader.ReadInt(FileStream, 1)[0]
                    Node.RotationKeyTrack.Data.append(QuatKey)
                LastQuatKey = Node.RotationKeyTrack.Data[RotKeyNum - 1]
                Node.RotationKeyTrack.Data.append(LastQuatKey)

            if globalvars.CurrentAniFileVersion >= raidflags.EXPORTER_ANI_VER5:
                ScaleCount = binaryreader.ReadInt(FileStream, 1)[0]
                if ScaleCount:
                    Node.ScaleKeyTrack.Count = ScaleCount
                    for i in range(ScaleCount):
                        ScaleKey = datatypes.FVecKey()
                        ScaleKey.Vector = datatypes.FVector(
                            binaryreader.ReadFloat(FileStream, 3))
                        ScaleKey.Frame = binaryreader.ReadInt(FileStream, 1)[0]
                        Node.ScaleKeyTrack.Data.append(ScaleKey)

        except struct.error as err:
            errorhandling.HandleStructUnpackError(err)
    def LoadBoneAni(self, Node, FileStream, Offset=None):
        try:
            Node.Name = binaryreader.ReadWord(FileStream)
            Node.ParentName = binaryreader.ReadWord(FileStream)
            Node.LocalMatrix = datatypes.FMatrix(
                binaryreader.ReadFloat(FileStream, 16))

            AnimType_1 = datatypes.FAnimType(
                binaryreader.ReadInt(FileStream, 3))
            if AnimType_1.Count > 0:
                Node.PositionKeyTrack.Count = AnimType_1.Count + 1
                for i in range(AnimType_1.Count):
                    PosKey = datatypes.FVecKey()
                    PosKey.Vector = datatypes.FVector(
                        binaryreader.ReadFloat(FileStream, 3))
                    PosKey.Frame = binaryreader.ReadInt(FileStream, 1)[0]
                    Node.PositionKeyTrack.Data.append(PosKey)
                LastPosKey = Node.PositionKeyTrack.Data[AnimType_1.Count - 1]
                Node.PositionKeyTrack.Data.append(LastPosKey)

            AnimType_2 = datatypes.FAnimType(
                binaryreader.ReadInt(FileStream, 3))
            if AnimType_2.Count > 0:
                Node.RotationKeyTrack.Count = AnimType_2.Count + 1
                for i in range(AnimType_2.Count):
                    QuatKey = datatypes.FQuatKey()
                    QuatKey.Quat = datatypes.FQuaternion(
                        binaryreader.ReadFloat(FileStream, 4))
                    QuatKey.Frame = binaryreader.ReadInt(FileStream, 1)[0]
                    Node.RotationKeyTrack.Data.append(QuatKey)
                LastQuatKey = Node.RotationKeyTrack.Data[AnimType_2.Count - 1]
                Node.RotationKeyTrack.Data.append(LastQuatKey)

            AnimType_3 = datatypes.FAnimType(
                binaryreader.ReadInt(FileStream, 3))
            if AnimType_3.Count > 0:
                Node.ScaleKeyTrack.Count = AnimType_3.Count
                for i in range(AnimType_3.Count):
                    ScaleKey = datatypes.FVecKey()
                    ScaleKey.Vector = datatypes.FVector(
                        binaryreader.ReadFloat(FileStream, 3))
                    ScaleKey.Frame = binaryreader.ReadInt(FileStream, 1)[0]
                    Node.ScaleKeyTrack.Data.append(ScaleKey)

        except struct.error as err:
            errorhandling.HandleStructUnpackError(err)
예제 #3
0
    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)
예제 #4
0
    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)
예제 #5
0
    def LoadEtc(self, Node, FileStream, Offset):
        try:
            PrimitiveType = binaryreader.ReadInt(FileStream, 1)[0]

            Node.VertexIndexCount = binaryreader.ReadInt(FileStream, 1)[0]
            for i in range(Node.VertexIndexCount):
                VertexIndex = datatypes.FVertexIndex()
                UnsignedShorts = binaryreader.ReadUShort(FileStream, 6)
                VertexIndex.p = UnsignedShorts[0]
                VertexIndex.n = UnsignedShorts[1]
                VertexIndex.uv = UnsignedShorts[2]
                VertexIndex.uv2 = UnsignedShorts[3]
                VertexIndex.n_tan = UnsignedShorts[4]
                VertexIndex.n_bin = UnsignedShorts[5]
                Node.VertexIndexTable.append(VertexIndex)

            Node.BoneCount = binaryreader.ReadInt(FileStream, 1)[0]
            for i in range(Node.BoneCount):
                Matrix = datatypes.FMatrix(
                    binaryreader.ReadFloat(FileStream, 16))
                Node.BoneTable.append(Matrix)

            for i in range(Node.BoneCount):
                BoneIndex = binaryreader.ReadUShort(FileStream, 1)[0]
                Node.BoneTableIndices.append(BoneIndex)

            Node.MaterialInfoCount = binaryreader.ReadInt(FileStream, 1)[0]
            for i in range(Node.MaterialInfoCount):
                MtrlTableInfo = datatypes.FMtrlTableInfo()
                if globalvars.CurrentEluFileVersion < raidflags.EXPORTER_MESH_VER9:
                    MtrlTableInfo.MaterialID = binaryreader.ReadInt(
                        FileStream, 1)[0]
                    MtrlTableInfo.Offset = binaryreader.ReadUShort(
                        FileStream, 1)[0]
                    MtrlTableInfo.Count = binaryreader.ReadUShort(
                        FileStream, 1)[0]
                    MtrlTableInfo.SubMaterialIDForDrawMasking = binaryreader.ReadInt(
                        FileStream, 1)[0]
                else:
                    MtrlTableInfo.MaterialID = binaryreader.ReadInt(
                        FileStream, 1)[0]
                    MtrlTableInfo.Offset = binaryreader.ReadUShort(
                        FileStream, 1)[0]
                    MtrlTableInfo.Count = binaryreader.ReadUShort(
                        FileStream, 1)[0]
                    MtrlTableInfo.SubMaterialIDForDrawMasking = binaryreader.ReadInt(
                        FileStream, 1)[0]
                Node.MaterialInfoTable.append(MtrlTableInfo)

            Node.FaceIndexCount = binaryreader.ReadInt(FileStream, 1)[0]
            for i in range(Node.FaceIndexCount):
                FaceIndex = binaryreader.ReadUShort(FileStream, 1)[0]
                Node.FaceIndexTable.append(FaceIndex)

            # @todo GetBipID
            Node.BoundingBox.vmin = datatypes.FVector(
                binaryreader.ReadFloat(FileStream, 3))
            Node.BoundingBox.vmax = datatypes.FVector(
                binaryreader.ReadFloat(FileStream, 3))

            # @todo fix bounding box
        except struct.error as err:
            errorhandling.HandleStructUnpackError(err)