class_name GameSettingsType extends Node ## Container for project settings, for quick runtime access. var settings_file: String var audio_bus_file: String var free_camera_speed: float var x_sensitivity: float var y_sensitivity: float var x_acceleration: float var y_acceleration: float var invert_pitch: bool var enable_screen_shake: bool var enable_hit_lag: bool var projection_collisions: bool var projection_gravity: bool var default_text_speed: float func _init() -> void: ProjectSettings.settings_changed.connect(_read_settings) _read_settings() _load_audio_bus_override() func _read_settings() -> void: settings_file = ProjectSettings.get_setting("application/config/project_settings_override") audio_bus_file = ProjectSettings.get_setting("game/audio/buses/override_bus_layout") free_camera_speed = ProjectSettings.get_setting("game/config/controls/camera/free_camera_speed") x_sensitivity = ProjectSettings.get_setting("game/config/controls/camera/x_axis_sensitivity") y_sensitivity = ProjectSettings.get_setting("game/config/controls/camera/y_axis_sensitivity") x_acceleration = ProjectSettings.get_setting("game/config/controls/camera/x_axis_acceleration") y_acceleration = ProjectSettings.get_setting("game/config/controls/camera/y_axis_acceleration") invert_pitch = ProjectSettings.get_setting("game/config/controls/camera/invert_pitch") enable_screen_shake = ProjectSettings.get_setting( "game/config/accessibility/enable_screen_shake" ) enable_hit_lag = ProjectSettings.get_setting("game/config/accessibility/enable_hit_lag") projection_collisions = ProjectSettings.get_setting( "game/config/gameplay/projection/detect_collision" ) projection_gravity = ProjectSettings.get_setting( "game/config/gameplay/projection/use_local_gravity" ) default_text_speed = ProjectSettings.get_setting("game/config/text/default_text_speed") 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) ResourceSaver.save(AudioServer.generate_bus_layout(), audio_bus_file)