#include <animation_player.h>
Definition at line 20 of file animation_player.h.
◆ AnimationPlayer() [1/2]
impeller::scene::AnimationPlayer::AnimationPlayer |
( |
| ) |
|
|
default |
◆ ~AnimationPlayer()
impeller::scene::AnimationPlayer::~AnimationPlayer |
( |
| ) |
|
|
default |
◆ AnimationPlayer() [2/2]
◆ AddAnimation()
AnimationClip * impeller::scene::AnimationPlayer::AddAnimation |
( |
const std::shared_ptr< Animation > & |
animation, |
|
|
Node * |
bind_target |
|
) |
| |
Definition at line 23 of file animation_player.cc.
25 {
26 if (!animation) {
28 return nullptr;
29 }
30
31 AnimationClip
clip(animation, bind_target);
32
33
34
35 for (
const auto& binding :
clip.bindings_) {
36 auto decomp = binding.node->GetLocalTransform().Decompose();
37 if (!decomp.has_value()) {
38 continue;
39 }
40 target_transforms_.insert(
41 {binding.node, AnimationTransforms{.bind_pose = decomp.value()}});
42 }
43
44 auto result = clips_.insert({animation->GetName(), std::move(
clip)});
45 return &
result.first->second;
46}
static SkPath clip(const SkPath &path, const SkHalfPlane &plane)
◆ GetClip()
AnimationClip * impeller::scene::AnimationPlayer::GetClip |
( |
const std::string & |
name | ) |
const |
Definition at line 48 of file animation_player.cc.
48 {
50 if (
result == clips_.end()) {
51 return nullptr;
52 }
53 return const_cast<AnimationClip*
>(&
result->second);
54}
DEF_SWITCHES_START aot vmservice shared library name
◆ operator=()
◆ Update()
void impeller::scene::AnimationPlayer::Update |
( |
| ) |
|
Advanced all clips and updates animated properties in the scene.
Definition at line 56 of file animation_player.cc.
56 {
57 if (!previous_time_.has_value()) {
58 previous_time_ = Clock::now();
59 }
60 auto new_time = Clock::now();
61 auto delta_time = new_time - previous_time_.value();
62 previous_time_ = new_time;
63
64
65 for (auto& [node, transforms] : target_transforms_) {
66 transforms.animated_pose = transforms.bind_pose;
67 }
68
69
71 for (
auto& [_,
clip] : clips_) {
72 total_weight +=
clip.GetWeight();
73 }
74 Scalar weight_multiplier = total_weight > 1 ? 1 / total_weight : 1;
75
76
77 for (
auto& [_,
clip] : clips_) {
78 clip.Advance(delta_time);
79 clip.ApplyToBindings(target_transforms_, weight_multiplier);
80 }
81
82
83 for (auto& [node, transforms] : target_transforms_) {
84 node->SetLocalTransform(
Matrix(transforms.animated_pose));
85 }
86}
SK_API sk_sp< PrecompileColorFilter > Matrix()
The documentation for this class was generated from the following files: