From c52d861e63630ba6b7757959d4805dd55cb93b20 Mon Sep 17 00:00:00 2001 From: Vladimir nett00n Budylnikov Date: Thu, 24 Jul 2025 21:18:22 +0400 Subject: [PATCH] refactor --- scripts/AudioManager.gd | 30 +++++++++++++++++----------- scripts/SettingsManager.gd | 40 ++++++++++++++++++++++++++------------ scripts/SettingsMenu.gd | 15 -------------- 3 files changed, 47 insertions(+), 38 deletions(-) diff --git a/scripts/AudioManager.gd b/scripts/AudioManager.gd index 87db8d9..b15cdf5 100644 --- a/scripts/AudioManager.gd +++ b/scripts/AudioManager.gd @@ -2,32 +2,40 @@ extends Node const MUSIC_PATH := "res://audio/Space Horror InGame Music (Exploration) _Clement Panchout.wav" -@onready var music_player := AudioStreamPlayer.new() +var music_player: AudioStreamPlayer func _ready(): + music_player = AudioStreamPlayer.new() add_child(music_player) - if not _load_and_configure_stream(): + + var orig_stream = _load_stream() + if not orig_stream: push_error("Failed to load music stream: %s" % MUSIC_PATH) return + var stream = orig_stream.duplicate(true) as AudioStream + + _configure_stream_loop(stream) + music_player.stream = stream _configure_audio_bus() - if SettingsManager.get_setting("music_volume") > 0: - _start_music() + if SettingsManager.get_setting("music_volume") <= 0: + return -func _load_and_configure_stream() -> bool: - var stream: AudioStream = load(MUSIC_PATH) - if not stream: - return false + _start_music() +func _load_stream() -> AudioStream: + var res = load(MUSIC_PATH) + if not res or not res is AudioStream: + return null + return res + +func _configure_stream_loop(stream: AudioStream) -> void: if stream is AudioStreamWAV: stream.loop_mode = AudioStreamWAV.LOOP_FORWARD elif stream is AudioStreamOggVorbis: stream.loop = true - music_player.stream = stream - return true - func _configure_audio_bus() -> void: music_player.bus = "Music" music_player.volume_db = linear_to_db(SettingsManager.get_setting("music_volume")) diff --git a/scripts/SettingsManager.gd b/scripts/SettingsManager.gd index d58edae..c23b64b 100644 --- a/scripts/SettingsManager.gd +++ b/scripts/SettingsManager.gd @@ -1,5 +1,6 @@ extends Node +const LANGUAGES_JSON_PATH := "res://localization/languages.json" const SETTINGS_FILE = "user://settings.cfg" # dev `user://`=`%APPDATA%\Godot\app_userdata\Skelly` # prod `user://`=`%APPDATA%\Skelly\` @@ -48,21 +49,36 @@ func get_setting(key: String): func set_setting(key: String, value): settings[key] = value + _apply_setting_side_effect(key, value) + +func _apply_setting_side_effect(key: String, value) -> void: + match key: + "language": + TranslationServer.set_locale(value) + "master_volume": + AudioServer.set_bus_volume_db(AudioServer.get_bus_index("Master"), linear_to_db(value)) + "music_volume": + AudioManager.update_music_volume(value) + "sfx_volume": + AudioServer.set_bus_volume_db(AudioServer.get_bus_index("SFX"), linear_to_db(value)) func load_languages(): - var file = FileAccess.open("res://localization/languages.json", FileAccess.READ) - if file: - var json_string = file.get_as_text() - file.close() - var json = JSON.new() - var parse_result = json.parse(json_string) - if parse_result == OK: - languages_data = json.data - print("Languages loaded: ", languages_data.languages.keys()) - else: - print("Error parsing languages.json") - else: + var file = FileAccess.open(LANGUAGES_JSON_PATH, FileAccess.READ) + if not file: print("Could not open languages.json") + return + + var json_string = file.get_as_text() + file.close() + + var json = JSON.new() + if json.parse(json_string) != OK: + print("Error parsing languages.json") + return + + languages_data = json.data + if languages_data.has("languages"): + print("Languages loaded: ", languages_data.languages.keys()) func get_languages_data(): return languages_data diff --git a/scripts/SettingsMenu.gd b/scripts/SettingsMenu.gd index fc52ee7..595eedf 100644 --- a/scripts/SettingsMenu.gd +++ b/scripts/SettingsMenu.gd @@ -32,21 +32,6 @@ func _ready(): func _on_volume_slider_changed(value, setting_key): settings_manager.set_setting(setting_key, value) - var bus_map = { - "master_volume": "Master", - "music_volume": "Music", - "sfx_volume": "SFX" - } - - if bus_map.has(setting_key): - var bus_index = AudioServer.get_bus_index(bus_map[setting_key]) - if bus_index < 0: - return - if setting_key == "music_volume": - AudioManager.update_music_volume(value) - else: - AudioServer.set_bus_volume_db(bus_index, linear_to_db(value)) - func _exit_settings(): print("Exiting settings") settings_manager.save_settings()