Source code for scfile.structures.animation

"""
Dataclasses for skeletal animation (clips/actions).
"""

from dataclasses import dataclass, field

import numpy as np

from .skeleton import ModelSkeleton


[docs] @dataclass class AnimationClip: """Single animation clip with timing and transformation data.""" name: str = "clip" frames: int = 0 rate: float = 0.33 transforms: np.ndarray = field(default_factory=lambda: np.empty(0, dtype=np.float32)) @property def times(self): return np.arange(self.frames, dtype=np.float32) * self.rate
[docs] @dataclass class ModelAnimation: """Animation clips container.""" clips: list[AnimationClip] = field(default_factory=list)
[docs] def convert_to_local(self, skeleton: ModelSkeleton): for clip in self.clips: for bone in skeleton.bones: clip.transforms[:, bone.id, 4:7] += bone.position