72 lines
1.7 KiB
GDScript
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()
|