VisuTwin Canvas
C++ 3D Engine — Metal Backend
Loading...
Searching...
No Matches
animClip.cpp
Go to the documentation of this file.
1// SPDX-License-Identifier: Apache-2.0
2// Copyright 2025-2026 Arnis Lektauers
3#include "animClip.h"
4
5#include <algorithm>
6
7namespace visutwin::canvas
8{
9 AnimClip::AnimClip(const std::shared_ptr<AnimTrack>& track, const float time, const float speed,
10 const bool playing, const bool loop)
11 : _track(track), _time(time), _speed(speed), _playing(playing), _loop(loop)
12 {
13 }
14
16 {
17 _time = 0.0f;
18 _playing = true;
19 }
20
22 {
23 _playing = false;
24 }
25
27 {
28 _playing = true;
29 }
30
32 {
33 _playing = false;
34 _time = 0.0f;
35 }
36
37 void AnimClip::update(const float dt)
38 {
39 if (!_playing || !_track) {
40 return;
41 }
42
43 _time += dt * _speed;
44
45 const float duration = _track->duration();
46 if (duration <= 0.0f) {
47 _time = 0.0f;
48 return;
49 }
50
51 if (_loop) {
52 while (_time > duration) {
53 _time -= duration;
54 }
55 while (_time < 0.0f) {
56 _time += duration;
57 }
58 } else {
59 _time = std::clamp(_time, 0.0f, duration);
60 if (_time == 0.0f || _time == duration) {
61 _playing = false;
62 }
63 }
64 }
65
66 void AnimClip::eval(std::unordered_map<std::string, AnimTransform>& transforms) const
67 {
68 if (!_track) {
69 return;
70 }
71
72 _track->eval(_time, transforms);
73 }
74}
AnimClip(const std::shared_ptr< AnimTrack > &track, float time, float speed, bool playing, bool loop)
Definition animClip.cpp:9
void eval(std::unordered_map< std::string, AnimTransform > &transforms) const
Definition animClip.cpp:66
const std::shared_ptr< AnimTrack > & track() const
Definition animClip.h:43