92 lines
2.3 KiB
GDScript
92 lines
2.3 KiB
GDScript
class_name CSoundManager
|
|
extends Node
|
|
|
|
|
|
const MASTER_BUS = "Master"
|
|
const UI_BUS = "UI"
|
|
const SFX_BUS = "SFX"
|
|
const MUSIC_BUS = "Music"
|
|
|
|
|
|
@export_group("Pitch settings", "pitch")
|
|
@export_range(0.9, 1.1, 0.01) var putch_ui_min := 1.0
|
|
@export_range(0.9, 1.1, 0.01) var putch_ui_max := 1.0
|
|
@export_range(0.9, 1.1, 0.01) var putch_sfx_min := 1.0
|
|
@export_range(0.9, 1.1, 0.01) var putch_sfx_max := 1.0
|
|
|
|
@export_group("Number of players", "player_count")
|
|
@export_range(1, 10) var player_count_ui := 1
|
|
@export_range(1, 100) var player_count_sfx := 1
|
|
|
|
|
|
|
|
var _ui_players : Array[AudioStreamPlayer] = []
|
|
var _sfx_players : Array[AudioStreamPlayer2D] = []
|
|
var _music_player : AudioStreamPlayer
|
|
|
|
|
|
func _ready() -> void:
|
|
_create_ui_players()
|
|
_create_sfx_players()
|
|
_create_music_player()
|
|
|
|
|
|
func play_ui_stream(stream: AudioStream) -> AudioStreamPlayer:
|
|
var player := _get_free_player(_ui_players)
|
|
player.stream = stream
|
|
player.pitch_scale = randf_range(putch_ui_min, putch_ui_max)
|
|
player.play()
|
|
return player
|
|
|
|
|
|
func play_sfx_stream(stream: AudioStream, position: Vector2) -> AudioStreamPlayer2D:
|
|
var player := _get_free_2d_player(_sfx_players)
|
|
player.stream = stream
|
|
player.pitch_scale = randf_range(putch_ui_min, putch_ui_max)
|
|
player.position = position
|
|
player.play()
|
|
return player
|
|
|
|
|
|
func play_music_stream(stream: AudioStream) -> AudioStreamPlayer:
|
|
_music_player.stream = stream
|
|
_music_player.play()
|
|
return _music_player
|
|
|
|
|
|
func _create_ui_players() -> void:
|
|
for i in range(player_count_ui):
|
|
var player : AudioStreamPlayer = AudioStreamPlayer.new()
|
|
player.bus = UI_BUS
|
|
_ui_players.append(player)
|
|
add_child(player)
|
|
|
|
|
|
func _create_sfx_players() -> void:
|
|
for i in range(player_count_sfx):
|
|
var player : AudioStreamPlayer2D = AudioStreamPlayer2D.new()
|
|
player.bus = SFX_BUS
|
|
_sfx_players.append(player)
|
|
add_child(player)
|
|
|
|
|
|
func _create_music_player() -> void:
|
|
var player : AudioStreamPlayer = AudioStreamPlayer.new()
|
|
player.bus = MUSIC_BUS
|
|
_music_player = player
|
|
add_child(player)
|
|
|
|
|
|
func _get_free_player(players: Array[AudioStreamPlayer]) -> AudioStreamPlayer:
|
|
for player in players:
|
|
if not player.playing:
|
|
return player
|
|
return players[0]
|
|
|
|
|
|
func _get_free_2d_player(players: Array[AudioStreamPlayer2D]) -> AudioStreamPlayer2D:
|
|
for player in players:
|
|
if not player.playing:
|
|
return player
|
|
return players[0]
|