diff options
Diffstat (limited to 'scene/animation/animation_mixer.cpp')
-rw-r--r-- | scene/animation/animation_mixer.cpp | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/scene/animation/animation_mixer.cpp b/scene/animation/animation_mixer.cpp index dbd790003a..c6d69cf622 100644 --- a/scene/animation/animation_mixer.cpp +++ b/scene/animation/animation_mixer.cpp @@ -563,7 +563,7 @@ void AnimationMixer::_clear_audio_streams() { void AnimationMixer::_clear_playing_caches() { for (const TrackCache *E : playing_caches) { if (ObjectDB::get_instance(E->object_id)) { - E->object->call(SNAME("stop")); + E->object->call(SNAME("stop"), true); } } playing_caches.clear(); @@ -1708,7 +1708,12 @@ void AnimationMixer::_blend_apply() { } } } - t->object->set_indexed(t->subpath, Animation::cast_from_blendwise(t->value, t->init_value.get_type())); + + // t->object isn't safe here, get instance from id (GH-85365). + Object *obj = ObjectDB::get_instance(t->object_id); + if (obj) { + obj->set_indexed(t->subpath, Animation::cast_from_blendwise(t->value, t->init_value.get_type())); + } } break; case Animation::TYPE_BEZIER: { @@ -1980,6 +1985,7 @@ void AnimationMixer::reset() { } void AnimationMixer::restore(const Ref<AnimatedValuesBackup> &p_backup) { + ERR_FAIL_COND(p_backup.is_null()); track_cache = p_backup->get_data(); _blend_apply(); track_cache = HashMap<NodePath, AnimationMixer::TrackCache *>(); |