Skip to content

Commit bc24ab5

Browse files
committed
Implement internal Godot settings
1 parent f438c68 commit bc24ab5

File tree

4 files changed

+42
-6
lines changed

4 files changed

+42
-6
lines changed

project.godot

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ config_version=5
1212

1313
config/name="RetroHub"
1414
run/main_scene="res://scenes/root/Root.tscn"
15+
config/project_settings_override="user://engine_settings.cfg"
1516
config/features=PackedStringArray("4.2", "RetroHub")
1617
boot_splash/bg_color=Color(0.188235, 0.235294, 0.290196, 1)
1718
boot_splash/image="res://assets/icons/app/splash.png"
@@ -200,7 +201,6 @@ rh_rstick_down={
200201
[memory]
201202

202203
limits/message_queue/max_size_mb=128
203-
limits/command_queue/multithreading_queue_size_kb=1024
204204

205205
[physics]
206206

@@ -210,4 +210,3 @@ common/enable_pause_aware_picking=true
210210

211211
environment/defaults/default_clear_color=Color(0.188235, 0.235294, 0.290196, 1)
212212
environment/defaults/default_environment="res://default_env.tres"
213-
threads/thread_model=2

scenes/config/settings/GeneralSettings.gd

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,8 @@ func _on_config_ready(config_data: ConfigData):
7575
n_graphics_mode.selected = 1 if config_data.fullscreen else 0
7676
n_vsync.set_pressed_no_signal(config_data.vsync)
7777
n_render_res.value = config_data.render_resolution
78-
n_ui_volume.value = config_data.ui_volume
78+
n_ui_volume.set_value_no_signal(config_data.ui_volume)
79+
AudioServer.set_bus_volume_db(AudioServer.get_bus_index("Master"), linear_to_db(config_data.ui_volume / 100.0))
7980
set_language(config_data.lang)
8081
n_screen_reader.set_pressed_no_signal(config_data.accessibility_screen_reader_enabled)
8182

scenes/root/Root.gd

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,6 @@ func _ready():
4848
await get_tree().process_frame
4949
if RetroHubConfig.config.is_first_time:
5050
show_first_time_popup()
51-
get_window().mode = Window.MODE_EXCLUSIVE_FULLSCREEN if (RetroHubConfig.config.fullscreen) else Window.MODE_WINDOWED
52-
DisplayServer.window_set_vsync_mode(DisplayServer.VSYNC_ENABLED if (RetroHubConfig.config.vsync) else DisplayServer.VSYNC_DISABLED)
5351
setup_controller_remap(RetroHubConfig.config.custom_input_remap)
5452

5553
func _notification(what):

source/data/ConfigData.gd

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ var _config_changed := false
77
var _old_config : Dictionary
88

99
# Games directory
10-
var config_version : int = 1
10+
var config_version : int = 2
1111
var is_first_time : bool = true: set = _set_is_first_time
1212
var games_dir : String = FileUtils.get_home_dir() + "/ROMS": set = _set_games_dir
1313
var current_theme : String = "default": set = _set_current_theme
@@ -203,9 +203,17 @@ func _set_fullscreen(_fullscreen):
203203
mark_for_saving()
204204
fullscreen = _fullscreen
205205

206+
if _should_save:
207+
var mode := DisplayServer.WINDOW_MODE_EXCLUSIVE_FULLSCREEN if fullscreen else DisplayServer.WINDOW_MODE_WINDOWED
208+
_handle_internal_config("display", "window/size/mode", mode)
209+
206210
func _set_vsync(_vsync):
207211
mark_for_saving()
208212
vsync = _vsync
213+
214+
if _should_save:
215+
var mode := DisplayServer.VSYNC_ENABLED if vsync else DisplayServer.VSYNC_DISABLED
216+
_handle_internal_config("display", "window/vsync/vsync_mode", mode)
209217

210218
func _set_render_resolution(_render_resolution):
211219
mark_for_saving()
@@ -343,6 +351,8 @@ func load_config_from_path(path: String) -> int:
343351

344352
_should_save = false
345353
for key in _keys:
354+
# Config version should not be loaded
355+
if key == KEY_CONFIG_VERSION: continue
346356
if _old_config.has(key):
347357
set(key, _old_config[key])
348358
else:
@@ -459,15 +469,43 @@ func process_raw_config_changes(config: Dictionary):
459469
var version := _get_stored_version(config)
460470
while version < config_version:
461471
_should_save = true
472+
_config_changed = true
462473
_handle_config_update(config, version)
463474
version += 1
464475

465476
func _handle_config_update(config: Dictionary, version: int):
466477
match version:
478+
1:
479+
# Some configs are now stored in Godot format, allowing some
480+
# properties to be set on launch time (e.g. fullscreen)
481+
_set_fullscreen(fullscreen)
482+
_set_vsync(vsync)
483+
# Manually set these properties one last time, in order to
484+
# be completely transparent to the user
485+
DisplayServer.window_set_mode(
486+
DisplayServer.WINDOW_MODE_EXCLUSIVE_FULLSCREEN if (RetroHubConfig.config.fullscreen)
487+
else DisplayServer.WINDOW_MODE_WINDOWED
488+
)
489+
DisplayServer.window_set_vsync_mode(
490+
DisplayServer.VSYNC_ENABLED if (RetroHubConfig.config.vsync)
491+
else DisplayServer.VSYNC_DISABLED)
467492
0:
468493
# First config version; RetroHub port from Godot 3 to Godot 4
469494
# Input remaps have to be reset
470495
config[KEY_INPUT_KEY_MAP] = input_key_map
471496
config[KEY_CUSTOM_INPUT_REMAP] = custom_input_remap
472497
config[KEY_INPUT_CONTROLLER_MAP] = input_controller_map
473498
RetroHubUI.call_deferred("show_warning", "The following settings had to be reset due to incompatible changes in RetroHub:\n \n- Keyboard/controller remaps\n- Controller custom layout\n \nPlease reconfigure these in the Settings menu if desired.")
499+
500+
func _handle_internal_config(section: String, key: String, value: Variant) -> void:
501+
var internal_config_file : String = ProjectSettings.get("application/config/project_settings_override")
502+
if not internal_config_file or internal_config_file.is_empty():
503+
push_error("Internal config file path not found!")
504+
return
505+
var internal_config := ConfigFile.new()
506+
if FileAccess.file_exists(internal_config_file) and internal_config.load(internal_config_file):
507+
push_error("Failed loading internal config file!")
508+
return
509+
internal_config.set_value(section, key, value)
510+
if internal_config.save(internal_config_file):
511+
push_error("Failed saving internal config file!")

0 commit comments

Comments
 (0)