toFlameAnimation method

ModelAnimation toFlameAnimation()

Implementation

ModelAnimation toFlameAnimation() {
  final controllers = <int, List<AnimationController>>{};
  for (final channel in channels) {
    final path = channel.target.path;
    final sampler = samplers[channel.sampler];

    final times = sampler.input.get().typedData();
    final values = sampler.output.get();

    final spline = switch (path) {
      AnimationPath.translation => TranslationAnimationSpline.from(
          interpolation: sampler.interpolation,
          times: times,
          values: values.asVector3().typedData(),
        ),
      AnimationPath.scale => ScaleAnimationSpline.from(
          interpolation: sampler.interpolation,
          times: times,
          values: values.asVector3().typedData(),
        ),
      AnimationPath.rotation => RotationAnimationSpline.from(
          interpolation: sampler.interpolation,
          times: times,
          values: values.asQuaternion().typedData(),
        ),
      AnimationPath.weights => throw UnimplementedError(),
    } as AnimationSpline;

    final nodeIdx = channel.target.node.index;
    (controllers[nodeIdx] ??= []).add(
      AnimationController(
        animation: spline,
      ),
    );
  }
  final nodes = controllers.map(
    (key, value) => MapEntry(
      key,
      NodeAnimation(
        channels: value,
      ),
    ),
  );
  return ModelAnimation(
    name: name,
    nodes: nodes,
  );
}