From ba70958b29f847d048d40c6b0318fbbfaf9b829e Mon Sep 17 00:00:00 2001 From: kobewi Date: Sat, 6 Mar 2021 22:45:10 +0100 Subject: [PATCH] Fix audio player not resetting after wav finishes (cherry picked from commit daa62ccaa3ba2174dc348ee09987547dbe24a24f) --- editor/plugins/audio_stream_editor_plugin.cpp | 9 ++++++--- editor/plugins/audio_stream_editor_plugin.h | 19 ++++++++++--------- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/editor/plugins/audio_stream_editor_plugin.cpp b/editor/plugins/audio_stream_editor_plugin.cpp index 51ebcbe9ae..4dad5977b4 100644 --- a/editor/plugins/audio_stream_editor_plugin.cpp +++ b/editor/plugins/audio_stream_editor_plugin.cpp @@ -109,6 +109,8 @@ void AudioStreamEditor::_changed_callback(Object *p_changed, const char *p_prop) void AudioStreamEditor::_play() { if (_player->is_playing()) { + // '_pausing' variable indicates that we want to pause the audio player, not stop it. See '_on_finished()'. + _pausing = true; _player->stop(); _play_button->set_icon(get_icon("MainPlay", "EditorIcons")); set_process(false); @@ -131,10 +133,13 @@ void AudioStreamEditor::_stop() { void AudioStreamEditor::_on_finished() { _play_button->set_icon(get_icon("MainPlay", "EditorIcons")); - if (_current == _player->get_stream()->get_length()) { + if (!_pausing) { _current = 0; _indicator->update(); + } else { + _pausing = false; } + set_process(false); } void AudioStreamEditor::_draw_indicator() { @@ -210,8 +215,6 @@ void AudioStreamEditor::_bind_methods() { AudioStreamEditor::AudioStreamEditor() { set_custom_minimum_size(Size2(1, 100) * EDSCALE); - _current = 0; - _dragging = false; _player = memnew(AudioStreamPlayer); _player->connect("finished", this, "_on_finished"); diff --git a/editor/plugins/audio_stream_editor_plugin.h b/editor/plugins/audio_stream_editor_plugin.h index cd8b5dc16d..f13d4b3d0e 100644 --- a/editor/plugins/audio_stream_editor_plugin.h +++ b/editor/plugins/audio_stream_editor_plugin.h @@ -42,17 +42,18 @@ class AudioStreamEditor : public ColorRect { GDCLASS(AudioStreamEditor, ColorRect); Ref stream; - AudioStreamPlayer *_player; - ColorRect *_preview; - Control *_indicator; - Label *_current_label; - Label *_duration_label; + AudioStreamPlayer *_player = nullptr; + ColorRect *_preview = nullptr; + Control *_indicator = nullptr; + Label *_current_label = nullptr; + Label *_duration_label = nullptr; - ToolButton *_play_button; - ToolButton *_stop_button; + ToolButton *_play_button = nullptr; + ToolButton *_stop_button = nullptr; - float _current; - bool _dragging; + float _current = 0; + bool _dragging = false; + bool _pausing = false; protected: void _notification(int p_what);