Implemented spawn points correctly. Added saving & loading (currently only implemented with the spawn_index). You can now set spawn indicies in the DynamicAreaLoader to automatically load when the game is set to that value (on ready). Added configuration warnings to DynamicAreaLoader & PlayerSpawnPoint Added some generic translation (pot) files. Added AudioManager autoload to play, stop, fade audio streams (and set the bus directly). Added SceneFader autoload. Added SaveManager autoload. Added OptionsMenu with currently only volume sliders and a fullscreen toggle button. Added PauseMenu
68 lines
2.0 KiB
GDScript
68 lines
2.0 KiB
GDScript
extends Node
|
|
|
|
const MASTER: StringName = &"Master"
|
|
const MUSIC: StringName = &"Music"
|
|
const SFX: StringName = &"SFX"
|
|
const AMBIENCE: StringName = &"Ambient"
|
|
|
|
|
|
func play_audio(stream: AudioStream, bus: StringName, force_restart: bool = false) -> void:
|
|
if is_playing_audio(stream, bus):
|
|
if force_restart:
|
|
var existing_player: AudioStreamPlayer = get_audio_player_for_stream(stream, bus)
|
|
existing_player.stop()
|
|
existing_player.play()
|
|
|
|
return
|
|
|
|
var player: AudioStreamPlayer = _create_audio_player(stream, bus)
|
|
player.finished.connect(stop_audio.bind(stream, bus))
|
|
|
|
add_child(player)
|
|
player.play()
|
|
|
|
|
|
func stop_audio(stream: AudioStream, bus: StringName) -> void:
|
|
var player: AudioStreamPlayer = get_audio_player_for_stream(stream, bus)
|
|
|
|
if is_instance_valid(player):
|
|
player.queue_free()
|
|
|
|
|
|
func fade_audio(stream: AudioStream, volume_db: float, duration: float, bus: StringName, stop_on_finish: bool = false) -> void:
|
|
var player: AudioStreamPlayer = get_audio_player_for_stream(stream, bus)
|
|
|
|
if not is_instance_valid(player):
|
|
return
|
|
|
|
var tween: Tween = create_tween()
|
|
tween.tween_property(player, ^"volume_db", volume_db, duration)
|
|
|
|
await tween.finished
|
|
|
|
if stop_on_finish and is_instance_valid(player):
|
|
stop_audio(stream, bus)
|
|
|
|
|
|
func fade_audio_linear(stream: AudioStream, volume_linear: float, bus: StringName, duration: float, stop_on_finish: bool = false) -> void:
|
|
await fade_audio(stream, linear_to_db(volume_linear), duration, bus, stop_on_finish)
|
|
|
|
|
|
func get_audio_player_for_stream(stream: AudioStream, bus: StringName) -> AudioStreamPlayer:
|
|
for player: AudioStreamPlayer in get_children():
|
|
if player.stream == stream and player.bus == bus:
|
|
return player
|
|
|
|
return null
|
|
|
|
|
|
func is_playing_audio(stream: AudioStream, bus: StringName) -> bool:
|
|
return is_instance_valid(get_audio_player_for_stream(stream, bus))
|
|
|
|
|
|
func _create_audio_player(stream: AudioStream, bus: StringName) -> AudioStreamPlayer:
|
|
var player := AudioStreamPlayer.new()
|
|
player.bus = bus
|
|
player.stream = stream
|
|
return player
|