grunk/src/game/game_settings.gd

78 lines
2.7 KiB
GDScript3
Raw Normal View History

2025-03-22 19:16:52 -06:00
class_name GameSettingsType extends Node
## Autoloaded container for project settings, for quick runtime access.
var version: String
var settings_file: String
var audio_bus_file: String
var mouse_sensitivity_x: float
var mouse_sensitivity_y: float
var mouse_acceleration: float
var invert_pitch: bool
2025-04-04 11:06:08 -06:00
var hold_to_sneak: bool
2025-07-07 12:05:45 -06:00
var object_rotation_sensitivity_x: float
var object_rotation_sensitivity_y: float
2025-03-22 19:16:52 -06:00
var enable_screen_shake: bool
var enable_head_bob: bool
2025-04-22 23:22:54 -06:00
var enable_debug_menu: bool
2025-03-22 19:16:52 -06:00
func _init() -> void:
ProjectSettings.settings_changed.connect(_read_settings)
_read_settings()
_load_audio_bus_override()
func _read_settings() -> void:
version = ProjectSettings.get_setting("application/config/version")
settings_file = ProjectSettings.get_setting("application/config/project_settings_override")
audio_bus_file = ProjectSettings.get_setting("game/audio/buses/override_bus_layout")
mouse_sensitivity_x = ProjectSettings.get_setting("game/config/input/mouse_sensitivity_x")
mouse_sensitivity_y = ProjectSettings.get_setting("game/config/input/mouse_sensitivity_y")
mouse_acceleration = ProjectSettings.get_setting("game/config/input/mouse_acceleration")
invert_pitch = ProjectSettings.get_setting("game/config/input/invert_pitch")
2025-04-04 11:06:08 -06:00
hold_to_sneak = ProjectSettings.get_setting("game/config/input/hold_to_sneak")
2025-07-07 12:05:45 -06:00
object_rotation_sensitivity_x = ProjectSettings.get_setting(
"game/config/input/object_rotation_sensitivity_x"
)
object_rotation_sensitivity_y = ProjectSettings.get_setting(
"game/config/input/object_rotation_sensitivity_y"
)
2025-03-22 19:16:52 -06:00
enable_screen_shake = ProjectSettings.get_setting(
"game/config/accessibility/enable_screen_shake"
)
enable_head_bob = ProjectSettings.get_setting("game/config/accessibility/enable_head_bob")
2025-04-22 23:22:54 -06:00
enable_debug_menu = ProjectSettings.get_setting_with_override("game/debug/enable_debug_menu")
2025-03-22 19:16:52 -06:00
func _load_audio_bus_override() -> void:
# Load override audio bus file
if FileAccess.file_exists(audio_bus_file):
print_debug("Loading audio bus override from ", audio_bus_file)
var bus_layout: AudioBusLayout = load(audio_bus_file)
AudioServer.set_bus_layout(bus_layout)
func write() -> void:
print_debug("Writing settings to ", settings_file)
ProjectSettings.save_custom(settings_file)
print_debug("Writing audio bus levels to ", audio_bus_file)
2025-08-16 19:28:07 -06:00
# Write a bus layout with all effects removed
var base_layout := AudioServer.generate_bus_layout()
_strip_bus_effects()
2025-03-22 19:16:52 -06:00
ResourceSaver.save(AudioServer.generate_bus_layout(), audio_bus_file)
2025-08-16 19:28:07 -06:00
AudioServer.set_bus_layout(base_layout)
func _strip_bus_effects() -> void:
for bus_idx: int in AudioServer.bus_count:
for fx_idx: int in AudioServer.get_bus_effect_count(bus_idx):
AudioServer.remove_bus_effect(bus_idx, fx_idx)