Source code for scfile.formats.mcal.decoder
from scfile.consts import FileSignature
from scfile.core import FileDecoder, ModelContent
from scfile.enums import ByteOrder, F, FileFormat
from scfile.formats.mcsa.io import McsaFileIO
from scfile.structures import models as S
[docs]
class McalDecoder(FileDecoder[ModelContent], McsaFileIO):
format = FileFormat.MCAL
signature = FileSignature.MCAL
order = ByteOrder.LITTLE
_content = ModelContent
[docs]
def parse(self):
self._parse_header()
self._parse_animation()
def _parse_header(self):
self.data.version = self._readb(F.F32)
self.ctx["COUNT_BONES"] = self._readb(F.U32)
self.ctx["UNKNOWN_SIZE"] = self._readb(F.U8)
def _parse_animation(self):
self.ctx["COUNT_CLIPS"] = self._readb(F.I32)
for _ in range(self.ctx["COUNT_CLIPS"]):
self._parse_clip()
def _parse_clip(self):
clip = S.AnimationClip()
clip.name = self._readutf8()
clip.frames = self._readb(F.U32)
clip.rate = self._readb(F.F32)
rotations, translations = self._readclip(clip.frames, self.ctx["COUNT_BONES"])
clip.rotations = rotations
clip.translations = translations
self.data.scene.animation.clips.append(clip)