Bladeren bron

-make stream player and time restore state properly if removed, fixes #1949

Juan Linietsky 9 jaren geleden
bovenliggende
commit
259bd73cae
3 gewijzigde bestanden met toevoegingen van 14 en 2 verwijderingen
  1. 12 2
      scene/audio/stream_player.cpp
  2. 1 0
      scene/audio/stream_player.h
  3. 1 0
      scene/main/timer.cpp

+ 12 - 2
scene/audio/stream_player.cpp

@@ -100,11 +100,20 @@ void StreamPlayer::_notification(int p_what) {
 		case NOTIFICATION_ENTER_TREE: {
 
 			//set_idle_process(false); //don't annoy
-			if (stream.is_valid() && autoplay && !get_tree()->is_editor_hint())
-				play();
+			if (stream.is_valid() && !get_tree()->is_editor_hint()) {
+				if (resume_pos>=0) {
+					play(resume_pos);
+					resume_pos=-1;
+				} else if (autoplay) {
+					play();
+				}
+			}
 		} break;
 		case NOTIFICATION_EXIT_TREE: {
 
+			if (is_playing()) {
+				resume_pos=get_pos();
+			}
 			stop(); //wathever it may be doing, stop
 		} break;
 	}
@@ -397,6 +406,7 @@ StreamPlayer::StreamPlayer() {
 	buffering_ms=500;
 	loop_point=0;
 	stop_request=false;
+	resume_pos=-1;
 
 }
 

+ 1 - 0
scene/audio/stream_player.h

@@ -67,6 +67,7 @@ class StreamPlayer : public Node {
 	float loop_point;
 	int buffering_ms;
 	volatile bool stop_request;
+	float resume_pos;
 
 	AudioRBResampler resampler;
 

+ 1 - 0
scene/main/timer.cpp

@@ -42,6 +42,7 @@ void Timer::_notification(int p_what) {
 					break;
 #endif
 				start();
+				autostart=false;
 			}
 		} break;
 		case NOTIFICATION_PROCESS: {