From 368e2af61aedb4c9b094e3490e7523ab237755c2 Mon Sep 17 00:00:00 2001 From: Kellan KOZUME Date: Tue, 14 Jul 2026 21:29:42 -0400 Subject: [PATCH] feat(autoloads): add EventBus, SceneManager, AudioManager, GameState singletons --- scripts/autoloads/audio_manager.gd | 61 ++++++++++++++++++++++++++ scripts/autoloads/audio_manager.gd.uid | 1 + scripts/autoloads/event_bus.gd | 10 +++++ scripts/autoloads/event_bus.gd.uid | 1 + scripts/autoloads/game_state.gd | 2 + scripts/autoloads/game_state.gd.uid | 1 + scripts/autoloads/scene_manager.gd | 19 ++++++++ scripts/autoloads/scene_manager.gd.uid | 1 + 8 files changed, 96 insertions(+) create mode 100644 scripts/autoloads/audio_manager.gd create mode 100644 scripts/autoloads/audio_manager.gd.uid create mode 100644 scripts/autoloads/event_bus.gd create mode 100644 scripts/autoloads/event_bus.gd.uid create mode 100644 scripts/autoloads/game_state.gd create mode 100644 scripts/autoloads/game_state.gd.uid create mode 100644 scripts/autoloads/scene_manager.gd create mode 100644 scripts/autoloads/scene_manager.gd.uid diff --git a/scripts/autoloads/audio_manager.gd b/scripts/autoloads/audio_manager.gd new file mode 100644 index 0000000..bc4214d --- /dev/null +++ b/scripts/autoloads/audio_manager.gd @@ -0,0 +1,61 @@ +extends Node + +const AMBIANCE_VOLUME_DB: float = -12.0 +const SFX_VOLUME_DB: float = -8.0 + +const AMBIANCES: Dictionary = { +} + +const SFX: Dictionary = { + "game_over": preload("res://assets/audio/sfx/Jingles/GameOver.wav"), +} + +var music_player : AudioStreamPlayer +var sfx_player : AudioStreamPlayer + +func _ready() -> void: + process_mode = Node.PROCESS_MODE_ALWAYS + + music_player = AudioStreamPlayer.new() + music_player.name = "MusicPlayer" + music_player.bus = "Ambient" + music_player.volume_db = AMBIANCE_VOLUME_DB + add_child(music_player) + music_player.process_mode = Node.PROCESS_MODE_ALWAYS + + sfx_player = AudioStreamPlayer.new() + sfx_player.name = "SfxPlayer" + sfx_player.bus = "SFX" + sfx_player.volume_db = SFX_VOLUME_DB + add_child(sfx_player) + sfx_player.process_mode = Node.PROCESS_MODE_ALWAYS + music_player.finished.connect(_on_music_finished) + +func play_ambiance(zone: String) -> void: + if not AMBIANCES.has(zone): + return + if music_player.stream == AMBIANCES[zone] and music_player.playing: + return + + var tween: Tween = create_tween() + tween.tween_property(music_player, "volume_db", -40.0, 0.8) + tween.tween_callback(func(): + music_player.stream = AMBIANCES[zone] + music_player.play() + ) + tween.tween_property(music_player, "volume_db", AMBIANCE_VOLUME_DB, 1.2) + +func stop_ambiance() -> void: + var tween: Tween = create_tween() + tween.tween_property(music_player, "volume_db", -40.0, 1.0) + tween.tween_callback(music_player.stop) + +func play_sfx(sfx_name: String) -> void: + if not SFX.has(sfx_name): + push_warning("SFX introuvable : " + sfx_name) + return + sfx_player.stream = SFX[sfx_name] + sfx_player.play() + +func _on_music_finished() -> void: + music_player.play() diff --git a/scripts/autoloads/audio_manager.gd.uid b/scripts/autoloads/audio_manager.gd.uid new file mode 100644 index 0000000..b37bef6 --- /dev/null +++ b/scripts/autoloads/audio_manager.gd.uid @@ -0,0 +1 @@ +uid://c8et8kudxum4b diff --git a/scripts/autoloads/event_bus.gd b/scripts/autoloads/event_bus.gd new file mode 100644 index 0000000..1b936a7 --- /dev/null +++ b/scripts/autoloads/event_bus.gd @@ -0,0 +1,10 @@ +extends Node + +signal player_health_changed(new_value: int, max_value: int) +signal player_died +signal checkpoint_activated(position: Vector2) + +var last_level_path: String = "" +var has_checkpoint: bool = false +var last_checkpoint_position: Vector2 = Vector2.ZERO +var last_death_facing_direction: float = 1.0 diff --git a/scripts/autoloads/event_bus.gd.uid b/scripts/autoloads/event_bus.gd.uid new file mode 100644 index 0000000..82d0a44 --- /dev/null +++ b/scripts/autoloads/event_bus.gd.uid @@ -0,0 +1 @@ +uid://h5d322mdiobh diff --git a/scripts/autoloads/game_state.gd b/scripts/autoloads/game_state.gd new file mode 100644 index 0000000..199852a --- /dev/null +++ b/scripts/autoloads/game_state.gd @@ -0,0 +1,2 @@ +class_name Game_State +extends Node diff --git a/scripts/autoloads/game_state.gd.uid b/scripts/autoloads/game_state.gd.uid new file mode 100644 index 0000000..6ffe80a --- /dev/null +++ b/scripts/autoloads/game_state.gd.uid @@ -0,0 +1 @@ +uid://bi3pljtwk3866 diff --git a/scripts/autoloads/scene_manager.gd b/scripts/autoloads/scene_manager.gd new file mode 100644 index 0000000..c802a9c --- /dev/null +++ b/scripts/autoloads/scene_manager.gd @@ -0,0 +1,19 @@ +class_name Scene_Manager +extends Node + +signal scene_changed(scene_path: String) + +func change_scene(scene_path: String) -> void: + var error: Error = get_tree().change_scene_to_file(scene_path) + if error != OK: + return + scene_changed.emit(scene_path) + +func reload_current_scene() -> void: + var scene_file_path: String = get_tree().current_scene.scene_file_path + if scene_file_path == "": + return + change_scene(scene_file_path) + +func quit_game() -> void: + get_tree().quit() diff --git a/scripts/autoloads/scene_manager.gd.uid b/scripts/autoloads/scene_manager.gd.uid new file mode 100644 index 0000000..06e3433 --- /dev/null +++ b/scripts/autoloads/scene_manager.gd.uid @@ -0,0 +1 @@ +uid://uj5xcl3vc2vk