xiandie/manager/audio_manager/audio_manager.gd

57 lines
1.6 KiB
GDScript3
Raw Normal View History

2024-12-23 01:29:31 +00:00
extends Node
var sfx_players = [] as Array[AudioStreamPlayer]
var idx = 0
var bgm_dict = {}
func _ready() -> void:
for i in range(5):
var sfx_player = RandomAudioStreamPlayer.new()
sfx_players.append(sfx_player)
sfx_player.bus = "game_sfx"
add_child(sfx_player)
2024-12-23 01:29:31 +00:00
func play_sfx(sfx: AudioStream, db := 1.0) -> void:
sfx_players[idx].stream = sfx
sfx_players[idx].volume_db = db
sfx_players[idx].play()
idx = wrapi(idx + 1, 0, 5)
# 挂载并循环播放 bgm 音效
func loop_bgm_music(music_name: StringName, stream: AudioStream, db := 0.0, loop := true) -> void:
var audio_player = bgm_dict.get(music_name) as AudioStreamPlayer
if audio_player:
if audio_player.playing:
print("bgm music already playing: ", music_name)
return
bgm_dict.erase(music_name)
audio_player.stop()
audio_player.queue_free()
audio_player = AudioStreamPlayer.new()
add_child(audio_player)
bgm_dict[music_name] = audio_player
audio_player.stream = stream
audio_player.volume_db = db
audio_player.bus = "game_music"
audio_player.play()
if loop and stream.get_length() > 0:
audio_player.finished.connect(audio_player.play)
2025-03-12 10:43:02 +00:00
func stop_bgm_music(music_name: StringName, ease_duration:= 3.0) -> void:
var audio_player = bgm_dict.get(music_name) as AudioStreamPlayer
if audio_player:
2025-03-12 10:43:02 +00:00
if ease_duration <= 0:
remove_child(audio_player)
audio_player.queue_free()
else:
var tween = create_tween()
tween.tween_property(audio_player, "volume_db", -80.0, ease_duration)
tween.tween_callback(audio_player.queue_free)
bgm_dict.erase(music_name)
else:
print("music bgm not found: ", music_name)