pir-serious-game-ethics/scenes/BackgroundMusic.gd

72 lines
1.7 KiB
GDScript

extends Control
onready var _track1 := $Track1
onready var _track2 := $Track2
var fade_in_track: AudioStreamPlayer
var fade_out_track: AudioStreamPlayer
var current_path = ""
var current_volume = 0
var paused_volume_offset = -10
var paused = false
func _ready():
$Tween.connect("tween_all_completed", self, "on_Tween_tween_all_completed")
func _process(delta):
if paused and not get_tree().paused:
set_paused(false)
elif not paused and get_tree().paused:
set_paused(true)
func crossfade_to(path: String, volume:float, fade_length: float) -> void:
if current_path == path:
return
var stream: AudioStream = load(path)
fade_out_track = _track1
fade_in_track = _track2
if _track2.playing:
fade_out_track = _track2
fade_in_track = _track1
# setup the new track
fade_in_track.stream = stream
fade_in_track.volume_db = -60
$Tween.interpolate_property(fade_out_track, "volume_db", null, -60, fade_length, Tween.TRANS_LINEAR)
$Tween.interpolate_property(fade_in_track, "volume_db", -60, volume, fade_length, Tween.TRANS_LINEAR)
$Tween.start()
fade_in_track.play()
current_volume = volume
current_path = path
func on_Tween_tween_all_completed():
fade_out_track.stop()
func set_paused(pause: bool):
paused = pause
var volume = current_volume
if pause:
volume += paused_volume_offset
if _track1.playing:
_track1.volume_db = volume
elif _track2.playing:
_track2.volume_db = volume
func fade_out(fade_length:float = 1) -> void:
current_path = ""
$Tween.interpolate_property(_track1, "volume_db", null, -60, fade_length, Tween.TRANS_LINEAR)
$Tween.interpolate_property(_track2, "volume_db", null, -60, fade_length, Tween.TRANS_LINEAR)
$Tween.start()