93 lines
2.5 KiB
GDScript3
93 lines
2.5 KiB
GDScript3
|
extends Control
|
||
|
|
||
|
var players = []
|
||
|
|
||
|
# Declare member variables here. Examples:
|
||
|
# var a = 2
|
||
|
# var b = "text"
|
||
|
var AudioSyncs = []
|
||
|
var AudioStreams = []
|
||
|
var AudioVolumes = []
|
||
|
export(VideoStreamWebm) var VideoStream
|
||
|
export(bool) var paused
|
||
|
export(int) var VideoDurationSeconds
|
||
|
export(float) var stream_position
|
||
|
export(float) var volume_db
|
||
|
signal finished
|
||
|
|
||
|
# Called when the node enters the scene tree for the first time.
|
||
|
func _ready():
|
||
|
$VideoPlayer.stream = VideoStream
|
||
|
$VideoPlayer.paused = paused
|
||
|
$TextureProgress.max_value = VideoDurationSeconds
|
||
|
$VideoPlayer.volume_db = volume_db
|
||
|
print(">>>count is "+String(len(AudioSyncs))+","+String(len(players))+","+String(len(AudioStreams)))
|
||
|
|
||
|
func play():
|
||
|
$VideoPlayer.play()
|
||
|
|
||
|
func stop():
|
||
|
$VideoPlayer.stop()
|
||
|
for playerid in range(0,len(players)):
|
||
|
print(">>>Stopping player"+String(playerid))
|
||
|
players[playerid].stop()
|
||
|
|
||
|
func set_VideoStream(new_stream):
|
||
|
VideoStream = new_stream
|
||
|
if !is_inside_tree(): return
|
||
|
$VideoPlayer.stream = new_stream
|
||
|
print(">>>VideoStream is now "+new_stream.to_string())
|
||
|
|
||
|
func set_paused(value):
|
||
|
if !is_inside_tree(): return
|
||
|
$VideoPlayer.paused = value
|
||
|
paused = value
|
||
|
print(">>>Paused is now "+String(value))
|
||
|
|
||
|
func set_VideoDurationSeconds(value):
|
||
|
if !is_inside_tree(): return
|
||
|
$TextureProgress.max_value = value
|
||
|
VideoDurationSeconds = value
|
||
|
print(">>>VideoDurationSeconds is now "+String(value))
|
||
|
|
||
|
func set_volume_db(value):
|
||
|
if !is_inside_tree(): return
|
||
|
$VideoPlayer.volume_db = value
|
||
|
volume_db = value
|
||
|
print(">>>volume_db is now "+String(value))
|
||
|
|
||
|
func set_audio_volume_db(which, value):
|
||
|
players[which].set_volume_db(value)
|
||
|
|
||
|
func get_stream_position():
|
||
|
return $VideoPlayer.stream_position
|
||
|
|
||
|
func add_audio_stream(stream, delay):
|
||
|
var player = AudioStreamPlayer.new()
|
||
|
player.set_stream(stream)
|
||
|
player.volume_db = 1
|
||
|
player.pitch_scale = 1
|
||
|
add_child(player)
|
||
|
players.append(player)
|
||
|
AudioSyncs.append(delay)
|
||
|
AudioStreams.append(stream)
|
||
|
print(">>>added stream, count is now "+String(len(AudioSyncs))+","+String(len(players))+","+String(len(AudioStreams)))
|
||
|
|
||
|
func play_combined():
|
||
|
$VideoPlayer.play()
|
||
|
for playerid in range(0,len(players)):
|
||
|
print(">>>Playing player"+String(playerid))
|
||
|
players[playerid].play()
|
||
|
players[playerid].stream_paused = true
|
||
|
players[playerid].seek(AudioSyncs[playerid])
|
||
|
players[playerid].stream_paused = false
|
||
|
|
||
|
|
||
|
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||
|
func _process(delta):
|
||
|
$TextureProgress.value = $VideoPlayer.stream_position
|
||
|
|
||
|
|
||
|
func _on_VideoPlayer_finished():
|
||
|
emit_signal("finished")
|