netmasked/scripts/singletons/sound_manager.gd

56 lines
1.6 KiB
GDScript

extends Node
const SFX_DEATH : Resource = preload("res://assets/sfx/death.mp3")
const SFX_HEART : Resource = preload("res://assets/sfx/heart.mp3")
const SFX_SWING : Resource = preload("res://assets/sfx/swing.mp3")
const SFX_CLICK : Resource = preload("res://assets/sfx/click.mp3")
const MUSIC_TITLE : Resource = preload("res://assets/music/title.wav")
var pool_size = 10
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
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_resource: Resource):
var asp : AudioStreamPlayer = sfx_pool[current_pool_index]
asp.stream = sound_resource
asp.pitch_scale = randf() + 0.5
asp.play()
current_pool_index = (current_pool_index + 1) % pool_size
func play_music(music_res: Resource, fade_duration: float = 1.0):
var next_track = music_res
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()