|
@@ -161,6 +161,10 @@ void VideoPlayer::_notification(int p_notification) {
|
|
|
playback->update(delta); // playback->is_playing() returns false in the last video frame
|
|
|
|
|
|
if (!playback->is_playing()) {
|
|
|
+ if (loop) {
|
|
|
+ play();
|
|
|
+ return;
|
|
|
+ }
|
|
|
emit_signal(SceneStringNames::get_singleton()->finished);
|
|
|
}
|
|
|
|
|
@@ -199,6 +203,14 @@ bool VideoPlayer::has_expand() const {
|
|
|
return expand;
|
|
|
}
|
|
|
|
|
|
+void VideoPlayer::set_loop(bool p_loop) {
|
|
|
+ loop = p_loop;
|
|
|
+}
|
|
|
+
|
|
|
+bool VideoPlayer::has_loop() const {
|
|
|
+ return loop;
|
|
|
+}
|
|
|
+
|
|
|
void VideoPlayer::set_stream(const Ref<VideoStream> &p_stream) {
|
|
|
stop();
|
|
|
|
|
@@ -261,6 +273,9 @@ void VideoPlayer::play() {
|
|
|
// AudioServer::get_singleton()->stream_set_active(stream_rid,true);
|
|
|
// AudioServer::get_singleton()->stream_set_volume_scale(stream_rid,volume);
|
|
|
last_audio_time = 0;
|
|
|
+
|
|
|
+ // We update the playback to render the first frame immediately.
|
|
|
+ playback->update(0);
|
|
|
};
|
|
|
|
|
|
void VideoPlayer::stop() {
|
|
@@ -418,6 +433,9 @@ void VideoPlayer::_bind_methods() {
|
|
|
ClassDB::bind_method(D_METHOD("set_paused", "paused"), &VideoPlayer::set_paused);
|
|
|
ClassDB::bind_method(D_METHOD("is_paused"), &VideoPlayer::is_paused);
|
|
|
|
|
|
+ ClassDB::bind_method(D_METHOD("set_loop", "loop"), &VideoPlayer::set_loop);
|
|
|
+ ClassDB::bind_method(D_METHOD("has_loop"), &VideoPlayer::has_loop);
|
|
|
+
|
|
|
ClassDB::bind_method(D_METHOD("set_volume", "volume"), &VideoPlayer::set_volume);
|
|
|
ClassDB::bind_method(D_METHOD("get_volume"), &VideoPlayer::get_volume);
|
|
|
|
|
@@ -456,6 +474,7 @@ void VideoPlayer::_bind_methods() {
|
|
|
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "autoplay"), "set_autoplay", "has_autoplay");
|
|
|
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "paused"), "set_paused", "is_paused");
|
|
|
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "expand"), "set_expand", "has_expand");
|
|
|
+ ADD_PROPERTY(PropertyInfo(Variant::BOOL, "loop"), "set_loop", "has_loop");
|
|
|
ADD_PROPERTY(PropertyInfo(Variant::INT, "buffering_msec", PROPERTY_HINT_RANGE, "10,1000"), "set_buffering_msec", "get_buffering_msec");
|
|
|
ADD_PROPERTY(PropertyInfo(Variant::REAL, "stream_position", PROPERTY_HINT_RANGE, "0,1280000,0.1", 0), "set_stream_position", "get_stream_position");
|
|
|
|
|
@@ -468,6 +487,7 @@ VideoPlayer::VideoPlayer() {
|
|
|
paused = false;
|
|
|
autoplay = false;
|
|
|
expand = true;
|
|
|
+ loop = false;
|
|
|
|
|
|
audio_track = 0;
|
|
|
bus_index = 0;
|