extends Node @export var default_fade_time = 1.0 @export var decontamination_musics : Array[AudioStreamPlayer] @export var decontamination_musics_levels : Array[float] @onready var playing_music = null : set = play_music func _ready(): GameInfo.game_data.current_planet_data_updated.connect(_on_current_planet_data_updated) func _on_current_planet_data_updated(planet_data : PlanetData): if planet_data: planet_data.contamination_updated.connect(_on_contamination_updated) if len(decontamination_musics): play_music(decontamination_musics[0]) func _on_contamination_updated(decontamination_surface : float): var actual_level = 0 if len(decontamination_musics_levels) and len(decontamination_musics): for level in range(1, len(decontamination_musics_levels)): if decontamination_surface > decontamination_musics_levels[level]: actual_level = level if len(decontamination_musics) > actual_level: play_music(decontamination_musics[actual_level]) func stop_music(): play_music(null) func play_music(music : AudioStreamPlayer): if playing_music != null: if playing_music != music: if playing_music: await audio_fade(playing_music, false).finished if music: music.play() elif music != null and music != playing_music: music.play() playing_music = music func audio_fade(music : AudioStreamPlayer, fade_in = true, fade_time = default_fade_time) -> Tween: var fade_tween : Tween = get_tree().create_tween() var music_default_volume = music.volume_db var target_volume = music_default_volume if fade_in else -80. if fade_in: music.volume_db = -80. music.play() fade_tween.tween_property(music, "volume_db", target_volume, fade_time) if not fade_in: fade_tween.finished.connect( func(): music.stop() music.volume_db = music_default_volume ) return fade_tween