diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2023-01-18 22:41:43 +0100 |
---|---|---|
committer | Rémi Verschelde <rverschelde@gmail.com> | 2023-01-18 22:41:43 +0100 |
commit | acd62443b665f57560db64912f833286eafa4971 (patch) | |
tree | 3b4372b0c19a4af41b7edab09544054b9c74bfc8 /scene | |
parent | 5dd3a6dbe2a05ab72f8c5496561b02fdad4f7560 (diff) | |
parent | d16004f2970797d4c6814707401b5494d23f5357 (diff) |
Merge pull request #71619 from TokageItLab/add-keep-state-to-anim-stop
Add `p_keep_state` to `AnimationPlayer::stop()`
Diffstat (limited to 'scene')
-rw-r--r-- | scene/animation/animation_player.cpp | 20 | ||||
-rw-r--r-- | scene/animation/animation_player.h | 4 |
2 files changed, 14 insertions, 10 deletions
diff --git a/scene/animation/animation_player.cpp b/scene/animation/animation_player.cpp index 0771c7ef06..0febe580db 100644 --- a/scene/animation/animation_player.cpp +++ b/scene/animation/animation_player.cpp @@ -1736,11 +1736,11 @@ String AnimationPlayer::get_assigned_animation() const { } void AnimationPlayer::pause() { - _stop_internal(false); + _stop_internal(false, false); } -void AnimationPlayer::stop() { - _stop_internal(true); +void AnimationPlayer::stop(bool p_keep_state) { + _stop_internal(true, p_keep_state); } void AnimationPlayer::set_speed_scale(float p_speed) { @@ -1960,14 +1960,18 @@ void AnimationPlayer::_set_process(bool p_process, bool p_force) { processing = p_process; } -void AnimationPlayer::_stop_internal(bool p_reset) { +void AnimationPlayer::_stop_internal(bool p_reset, bool p_keep_state) { _stop_playing_caches(p_reset); Playback &c = playback; c.blend.clear(); if (p_reset) { - is_stopping = true; - seek(0, true); - is_stopping = false; + if (p_keep_state) { + c.current.pos = 0; + } else { + is_stopping = true; + seek(0, true); + is_stopping = false; + } c.current.from = nullptr; c.current.speed_scale = 1; } @@ -2139,7 +2143,7 @@ void AnimationPlayer::_bind_methods() { ClassDB::bind_method(D_METHOD("play", "name", "custom_blend", "custom_speed", "from_end"), &AnimationPlayer::play, DEFVAL(""), DEFVAL(-1), DEFVAL(1.0), DEFVAL(false)); ClassDB::bind_method(D_METHOD("play_backwards", "name", "custom_blend"), &AnimationPlayer::play_backwards, DEFVAL(""), DEFVAL(-1)); ClassDB::bind_method(D_METHOD("pause"), &AnimationPlayer::pause); - ClassDB::bind_method(D_METHOD("stop"), &AnimationPlayer::stop); + ClassDB::bind_method(D_METHOD("stop", "keep_state"), &AnimationPlayer::stop, DEFVAL(false)); ClassDB::bind_method(D_METHOD("is_playing"), &AnimationPlayer::is_playing); ClassDB::bind_method(D_METHOD("set_current_animation", "anim"), &AnimationPlayer::set_current_animation); diff --git a/scene/animation/animation_player.h b/scene/animation/animation_player.h index 8dfa7aed27..7e7d12f982 100644 --- a/scene/animation/animation_player.h +++ b/scene/animation/animation_player.h @@ -295,7 +295,7 @@ private: void _animation_changed(const StringName &p_name); void _set_process(bool p_process, bool p_force = false); - void _stop_internal(bool p_reset); + void _stop_internal(bool p_reset, bool p_keep_state); bool playing = false; @@ -349,7 +349,7 @@ public: Vector<String> get_queue(); void clear_queue(); void pause(); - void stop(); + void stop(bool p_keep_state = false); bool is_playing() const; String get_current_animation() const; void set_current_animation(const String &p_anim); |