@icon("res://components/Audio/music.svg") extends Base var music_data var sfx_data var current_playing_music var tweens = {} func _spawned(): if _triggerer: _triggerer.listen("any", _on_trigger) music_data = _data.data.music sfx_data = _data.data.sfx for music in music_data: var music_value = music_data[music] if not _data.data.audio.has(music): _error("Could not find file for music %s" % [music]) continue music_value.track = _data.data.audio[music] var music_object = AudioStreamPlayer.new() music_object.name = "Music - %s" % [music_value.name] music_object.stream = music_value.track add_child(music_object) music_value.object = music_object _info("Loaded music %s" % [music]) for sfx in sfx_data: var sfx_value = sfx_data[sfx] if not _data.data.audio.has(sfx): _error("Could not find file for sfx %s" % [sfx]) continue sfx_value.track = _data.data.audio[sfx] var sfx_object = AudioStreamPlayer.new() sfx_object.name = "SFX - %s" % [sfx_value.name] sfx_object.stream = sfx_value.track add_child(sfx_object) sfx_value.object = sfx_object _info("Loaded sfx %s" % [sfx]) func _on_trigger(data: Dictionary) -> void: var trigger = data.trigger if not trigger.begins_with("audio_"): return var audio_name = trigger.split("_", false, 1)[1] for music in music_data: var music_value = music_data[music] if not music == audio_name: continue if not music_value.has("track"): continue if current_playing_music: if tweens.has(current_playing_music): tweens[current_playing_music].kill() tweens[current_playing_music] = create_tween() tweens[current_playing_music].tween_property(music_data[current_playing_music].object, "volume_db", -30, 1) tweens[current_playing_music].tween_callback(func(): music_data[current_playing_music].object.stop() ) if tweens.has(music): tweens[music].kill() if data.has("keep_position") and data.keep_position: music_value.object.play(music_data[current_playing_music].object.get_playback_position()) else: music_value.object.play() tweens[music] = create_tween() tweens[music].tween_property(music_data[music].object, "volume_db", 0, 1) current_playing_music = music return for sfx in sfx_data: if not sfx == audio_name: continue pass