diff options
| author | AndreaCatania | 2017-10-03 18:49:32 +0200 |
|---|---|---|
| committer | Andrea Catania | 2018-05-07 21:03:16 +0200 |
| commit | 9e57a07fb60fcd6c55bd51cf63d4c3cf4c6a3b26 (patch) | |
| tree | ccf404b982a662dfba1c3c5d663ba16b6f7ba2e3 /scene/animation | |
| parent | 8c30337565326f313e398f6428eda5cb17614f14 (diff) | |
| download | godot-9e57a07fb60fcd6c55bd51cf63d4c3cf4c6a3b26.tar.gz godot-9e57a07fb60fcd6c55bd51cf63d4c3cf4c6a3b26.tar.zst godot-9e57a07fb60fcd6c55bd51cf63d4c3cf4c6a3b26.zip | |
Diffstat (limited to 'scene/animation')
| -rw-r--r-- | scene/animation/animation_player.cpp | 17 | ||||
| -rw-r--r-- | scene/animation/animation_tree_player.cpp | 8 | ||||
| -rw-r--r-- | scene/animation/animation_tree_player.h | 2 |
3 files changed, 17 insertions, 10 deletions
diff --git a/scene/animation/animation_player.cpp b/scene/animation/animation_player.cpp index eb3954af2..c0d1e62e0 100644 --- a/scene/animation/animation_player.cpp +++ b/scene/animation/animation_player.cpp @@ -246,8 +246,9 @@ void AnimationPlayer::_ensure_node_caches(AnimationData *p_anim) { if (a->track_get_path(i).get_subname_count() == 1 && Object::cast_to<Skeleton>(child)) { - bone_idx = Object::cast_to<Skeleton>(child)->find_bone(a->track_get_path(i).get_subname(0)); - if (bone_idx == -1) { + Skeleton *sk = Object::cast_to<Skeleton>(child); + bone_idx = sk->find_bone(a->track_get_path(i).get_subname(0)); + if (bone_idx == -1 || sk->is_bone_ignore_animation(bone_idx)) { continue; } @@ -579,16 +580,14 @@ void AnimationPlayer::_animation_process2(float p_delta) { } void AnimationPlayer::_animation_update_transforms() { + { + Transform t; + for (int i = 0; i < cache_update_size; i++) { - for (int i = 0; i < cache_update_size; i++) { + TrackNodeCache *nc = cache_update[i]; - TrackNodeCache *nc = cache_update[i]; + ERR_CONTINUE(nc->accum_pass != accum_pass); - ERR_CONTINUE(nc->accum_pass != accum_pass); - - if (nc->spatial) { - - Transform t; t.origin = nc->loc_accum; t.basis.set_quat_scale(nc->rot_accum, nc->scale_accum); if (nc->skeleton && nc->bone_idx >= 0) { diff --git a/scene/animation/animation_tree_player.cpp b/scene/animation/animation_tree_player.cpp index afdb8b6f7..ce5b372d7 100644 --- a/scene/animation/animation_tree_player.cpp +++ b/scene/animation/animation_tree_player.cpp @@ -812,6 +812,12 @@ void AnimationTreePlayer::_process_animation(float p_delta) { t.value = t.object->get_indexed(t.subpath); t.value.zero(); + + if (t.skeleton) { + t.skip = t.skeleton->is_bone_ignore_animation(t.bone_idx); + } else { + t.skip = false; + } } /* STEP 2 PROCESS ANIMATIONS */ @@ -884,7 +890,7 @@ void AnimationTreePlayer::_process_animation(float p_delta) { Track &t = E->get(); - if (!t.object) + if (t.skip || !t.object) continue; if (t.subpath.size()) { // value track diff --git a/scene/animation/animation_tree_player.h b/scene/animation/animation_tree_player.h index 873ff8a9d..09d6f6fcb 100644 --- a/scene/animation/animation_tree_player.h +++ b/scene/animation/animation_tree_player.h @@ -107,6 +107,8 @@ private: Vector3 scale; Variant value; + + bool skip; }; typedef Map<TrackKey, Track> TrackMap; |
