Ver Fonte

only call finished signal when it really finishes, closes #5222

Juan Linietsky há 9 anos atrás
pai
commit
ac6257bf8a
2 ficheiros alterados com 9 adições e 3 exclusões
  1. 7 3
      scene/audio/stream_player.cpp
  2. 2 0
      scene/audio/stream_player.h

+ 7 - 3
scene/audio/stream_player.cpp

@@ -77,7 +77,7 @@ void StreamPlayer::sp_update() {
 			if (to_mix==0) {
 				if (!stop_request) {
 					stop_request=true;
-					call_deferred("stop");
+					call_deferred("_do_stop");
 				}
 				return;
 			}
@@ -91,7 +91,10 @@ void StreamPlayer::sp_update() {
 	}
 }
 
-
+void StreamPlayer::_do_stop() {
+	stop();
+	emit_signal("finished");
+}
 
 void StreamPlayer::_notification(int p_what) {
 
@@ -181,7 +184,7 @@ void StreamPlayer::stop() {
 	stop_request=false;
 	playback->stop();
 	resampler.flush();
-	emit_signal("finished");
+	
 
 	//set_idle_process(false);
 }
@@ -381,6 +384,7 @@ void StreamPlayer::_bind_methods() {
 
 	ObjectTypeDB::bind_method(_MD("_set_play","play"),&StreamPlayer::_set_play);
 	ObjectTypeDB::bind_method(_MD("_get_play"),&StreamPlayer::_get_play);
+	ObjectTypeDB::bind_method(_MD("_do_stop"),&StreamPlayer::_do_stop);
 
 	ADD_PROPERTY( PropertyInfo(Variant::OBJECT, "stream/stream", PROPERTY_HINT_RESOURCE_TYPE,"AudioStream"), _SCS("set_stream"), _SCS("get_stream") );
 	ADD_PROPERTY( PropertyInfo(Variant::BOOL, "stream/play"), _SCS("_set_play"), _SCS("_get_play") );

+ 2 - 0
scene/audio/stream_player.h

@@ -71,6 +71,8 @@ class StreamPlayer : public Node {
 
 	AudioRBResampler resampler;
 
+	void _do_stop();
+
 	bool _play;
 	void _set_play(bool p_play);
 	bool _get_play() const;