extends Node const SFX_DEATH = preload("res://assets/sfx/death.mp3") const SFX_HEART = preload("res://assets/sfx/heart.mp3") const SFX_SWING = preload("res://assets/sfx/swing.mp3") const SFX_CLICK = preload("res://assets/sfx/click.mp3") const MUSIC_TITLE = preload("res://assets/music/title.wav") # Configuration var pool_size = 10 var sfx_dict = {} var music_dict = {} var sfx_pool = [] var current_pool_index = 0 @onready var music_player_1 := AudioStreamPlayer.new() @onready var music_player_2 := AudioStreamPlayer.new() func _ready(): process_mode = Node.PROCESS_MODE_ALWAYS sfx_dict = { "death": SFX_DEATH, "heart": SFX_HEART, "swing": SFX_SWING, "click": SFX_CLICK } music_dict = { "title": MUSIC_TITLE } for i in range(pool_size): var asp = AudioStreamPlayer.new() asp.bus = "SFX" add_child(asp) sfx_pool.append(asp) add_child(music_player_1) add_child(music_player_2) music_player_1.bus = "Music" music_player_2.bus = "Music" func play_sfx(sound_name: String): if sfx_dict.has(sound_name): var asp : AudioStreamPlayer = sfx_pool[current_pool_index] asp.stream = sfx_dict[sound_name] asp.play() current_pool_index = (current_pool_index + 1) % pool_size func play_music(music_name: String, fade_duration: float = 1.0): if not music_dict.has(music_name): return var next_track = music_dict[music_name] var active = music_player_1 if music_player_1.playing else music_player_2 var idle = music_player_2 if music_player_1.playing else music_player_1 if active.stream == next_track: return idle.stream = next_track idle.volume_db = -80 idle.play() var tween = create_tween().set_parallel(true) tween.tween_property(active, "volume_db", -80, fade_duration) tween.tween_property(idle, "volume_db", 0, fade_duration) await tween.finished active.stop()