diff --git a/core/ui/vapor_ui/qam/performance_menu.gd b/core/ui/vapor_ui/qam/performance_menu.gd index f05304784..a5741cf81 100644 --- a/core/ui/vapor_ui/qam/performance_menu.gd +++ b/core/ui/vapor_ui/qam/performance_menu.gd @@ -1,13 +1,18 @@ extends Control +var gamescope := load("res://core/global/gamescope.tres") as Gamescope var logger := Log.get_logger("PerformanceMenu", Log.LEVEL.INFO) @onready var mangoapp_slider := $%MangoAppSlider +@onready var fps_slider := $%FramerateLimitSlider +@onready var fps_timer := $%FramerateChangeTimer as Timer # Called when the node enters the scene tree for the first time. func _ready() -> void: mangoapp_slider.value_changed.connect(_on_mangoapp_changed) + fps_slider.value_changed.connect(_on_fps_limit_changed) + fps_timer.timeout.connect(_on_fps_limit_timer_timeout) # Set the mangoapp config on slider change @@ -27,3 +32,14 @@ func _on_mangoapp_changed(value: float) -> void: if value >= 4: MangoApp.set_config(MangoApp.CONFIG_INSANE) return + + +# Whenever the FPS slider is changed, start a small timer to limit the number +# of changes +func _on_fps_limit_changed(_value: float) -> void: + fps_timer.start() + + +# Update the gamescope FPS limit +func _on_fps_limit_timer_timeout() -> void: + gamescope.set_fps_limit(fps_slider.value) diff --git a/core/ui/vapor_ui/qam/performance_menu.tscn b/core/ui/vapor_ui/qam/performance_menu.tscn index e3e2f6e72..a3cea99d5 100644 --- a/core/ui/vapor_ui/qam/performance_menu.tscn +++ b/core/ui/vapor_ui/qam/performance_menu.tscn @@ -42,9 +42,17 @@ text = "Per-game Profile" separator_visible = false [node name="FramerateLimitSlider" parent="VBoxContainer" instance=ExtResource("1_yptsc")] -visible = false +unique_name_in_owner = true layout_mode = 2 text = "FPS Limit" +value = 60.0 +max_value = 240.0 +step = 10.0 + +[node name="FramerateChangeTimer" type="Timer" parent="VBoxContainer/FramerateLimitSlider"] +unique_name_in_owner = true +wait_time = 0.5 +one_shot = true [node name="RefreshRateSlider" parent="VBoxContainer" instance=ExtResource("1_yptsc")] visible = false