Add transactional RV decor synchronization

This commit is contained in:
Alexander Sellite 2026-08-31 05:48:36 -04:00
parent ee992d9f0c
commit 6578d3e870
7 changed files with 663 additions and 48 deletions

View file

@ -1731,12 +1731,14 @@ func _process(delta: float) -> void:
func _apply_runtime_settings(settings: PlayerSettingsType) -> void:
if settings == null:
return
var requested_window_mode: DisplayServer.WindowMode = (
DisplayServer.WINDOW_MODE_FULLSCREEN
if settings.fullscreen_enabled
else DisplayServer.WINDOW_MODE_WINDOWED
var current_window_mode: DisplayServer.WindowMode = (
DisplayServer.window_get_mode()
)
if DisplayServer.window_get_mode() != requested_window_mode:
var requested_window_mode: DisplayServer.WindowMode = resolve_window_mode(
settings.fullscreen_enabled,
current_window_mode,
)
if current_window_mode != requested_window_mode:
DisplayServer.window_set_mode(requested_window_mode)
_apply_world_pixelation(settings.world_pixel_size)
_ui_pixelation.set_pixel_size(settings.ui_pixel_size)
@ -1763,6 +1765,25 @@ func _apply_runtime_settings(settings: PlayerSettingsType) -> void:
)
static func resolve_window_mode(
fullscreen_enabled: bool,
current_mode: DisplayServer.WindowMode,
) -> DisplayServer.WindowMode:
var is_fullscreen: bool = current_mode in [
DisplayServer.WINDOW_MODE_FULLSCREEN,
DisplayServer.WINDOW_MODE_EXCLUSIVE_FULLSCREEN,
]
if fullscreen_enabled:
return (
current_mode
if is_fullscreen
else DisplayServer.WINDOW_MODE_FULLSCREEN
)
if is_fullscreen:
return DisplayServer.WINDOW_MODE_WINDOWED
return current_mode
func _apply_world_pixelation(pixel_size: int) -> void:
var root_viewport: Viewport = get_viewport()
root_viewport.scaling_3d_mode = Viewport.SCALING_3D_MODE_NEAREST