Skip to content

Commit 4600886

Browse files
authored
Merge pull request #8 from Otozinclus/new-fps-slider
Add a FPS slider to options menu
2 parents af434f9 + c83c726 commit 4600886

File tree

3 files changed

+100
-6
lines changed

3 files changed

+100
-6
lines changed

src/scenes/ui/fps_slider.tscn

+50
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
[gd_scene load_steps=11 format=3 uid="uid://dqqi0ixflctdy"]
2+
3+
[ext_resource type="Texture2D" uid="uid://ckxgkwoiqj3on" path="res://assets/images/ui/slider_button.png" id="1_rgon2"]
4+
[ext_resource type="Texture2D" uid="uid://bju77jxdk7mwl" path="res://assets/images/ui/slider_button_hover.png" id="2_54ihq"]
5+
[ext_resource type="Texture2D" uid="uid://dnish8tdwujum" path="res://assets/images/ui/slider_button_held.png" id="3_4l2yy"]
6+
[ext_resource type="Texture2D" uid="uid://bektpxlme7plh" path="res://assets/images/ui/slider_bar.png" id="4_pfhvi"]
7+
[ext_resource type="Texture2D" uid="uid://ci82om0gcdj02" path="res://assets/images/ui/slider_bar_filled.png" id="5_jvm01"]
8+
[ext_resource type="Texture2D" uid="uid://cieae2burfs2c" path="res://assets/images/ui/slider_highlight.png" id="6_q2uf3"]
9+
[ext_resource type="Script" path="res://scripts/ui/fps_slider.gd" id="7_06ord"]
10+
11+
[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_n4eiu"]
12+
texture = ExtResource("4_pfhvi")
13+
texture_margin_left = 3.0
14+
texture_margin_top = 3.0
15+
texture_margin_right = 3.0
16+
texture_margin_bottom = 3.0
17+
region_rect = Rect2(0, 0, 11, 7)
18+
19+
[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_i10qj"]
20+
texture = ExtResource("5_jvm01")
21+
texture_margin_left = 3.0
22+
texture_margin_top = 2.0
23+
texture_margin_right = 3.0
24+
texture_margin_bottom = 4.0
25+
region_rect = Rect2(0, 0, 11, 7)
26+
27+
[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_3fvdy"]
28+
texture = ExtResource("6_q2uf3")
29+
texture_margin_left = 3.0
30+
texture_margin_top = 2.0
31+
texture_margin_right = 3.0
32+
texture_margin_bottom = 4.0
33+
34+
[node name="VolumeSlider" type="HSlider"]
35+
size_flags_horizontal = 3
36+
theme_override_icons/grabber = ExtResource("1_rgon2")
37+
theme_override_icons/grabber_highlight = ExtResource("2_54ihq")
38+
theme_override_icons/grabber_disabled = ExtResource("3_4l2yy")
39+
theme_override_icons/tick = ExtResource("1_rgon2")
40+
theme_override_styles/slider = SubResource("StyleBoxTexture_n4eiu")
41+
theme_override_styles/grabber_area = SubResource("StyleBoxTexture_i10qj")
42+
theme_override_styles/grabber_area_highlight = SubResource("StyleBoxTexture_3fvdy")
43+
max_value = 1.0
44+
step = 0.005
45+
ticks_on_borders = true
46+
script = ExtResource("7_06ord")
47+
48+
[connection signal="drag_ended" from="." to="." method="_on_drag_ended"]
49+
[connection signal="drag_started" from="." to="." method="_on_drag_started"]
50+
[connection signal="value_changed" from="." to="." method="_on_value_changed"]

src/scenes/ui/menu/options_menu.tscn

+23-6
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
[gd_scene load_steps=7 format=3 uid="uid://c0vf1vyo26r55"]
1+
[gd_scene load_steps=8 format=3 uid="uid://c0vf1vyo26r55"]
22

33
[ext_resource type="PackedScene" uid="uid://dt7ylcp3vogvt" path="res://scenes/ui/menu/menu.tscn" id="1_w3j1j"]
44
[ext_resource type="Script" path="res://scripts/ui/menu/options_menu.gd" id="1_wjxn1"]
55
[ext_resource type="LabelSettings" uid="uid://cl1yg37xye2ku" path="res://assets/resources/label_settings.tres" id="3_t0dhi"]
66
[ext_resource type="PackedScene" uid="uid://l4uy665qgi6n" path="res://scenes/ui/ui_button.tscn" id="5_jwcs2"]
7+
[ext_resource type="PackedScene" uid="uid://dqqi0ixflctdy" path="res://scenes/ui/fps_slider.tscn" id="5_mpshi"]
78
[ext_resource type="PackedScene" uid="uid://dv7orepl8b082" path="res://scenes/ui/volume_slider.tscn" id="6_gllis"]
89
[ext_resource type="PackedScene" uid="uid://ciguail0coyfn" path="res://scenes/ui/ui_fullscreen_button.tscn" id="7_t2eu6"]
910

@@ -49,20 +50,36 @@ autowrap_mode = 3
4950
layout_mode = 2
5051
audio_bus_name = "Music"
5152

52-
[node name="FullscreenButton" parent="MarginContainer/AspectRatioContainer/Items/Buttons" index="1" instance=ExtResource("7_t2eu6")]
53+
[node name="FpsSliderContainer" type="VBoxContainer" parent="MarginContainer/AspectRatioContainer/Items/Buttons" index="1"]
54+
layout_mode = 2
55+
56+
[node name="Label" type="Label" parent="MarginContainer/AspectRatioContainer/Items/Buttons/FpsSliderContainer" index="0"]
57+
custom_minimum_size = Vector2(70, 0)
58+
layout_mode = 2
59+
text = "FPS:"
60+
label_settings = ExtResource("3_t0dhi")
61+
autowrap_mode = 3
62+
63+
[node name="VolumeSlider" parent="MarginContainer/AspectRatioContainer/Items/Buttons/FpsSliderContainer" index="1" instance=ExtResource("5_mpshi")]
64+
layout_mode = 2
65+
66+
[node name="FullscreenButton" parent="MarginContainer/AspectRatioContainer/Items/Buttons" index="2" instance=ExtResource("7_t2eu6")]
5367
unique_name_in_owner = true
5468
layout_mode = 2
5569
text = "MENU_OPTIONS_FULLSCREEN"
5670
icon = null
5771

58-
[node name="Language" parent="MarginContainer/AspectRatioContainer/Items/Buttons" index="2" instance=ExtResource("5_jwcs2")]
72+
[node name="OptionsContainer" type="HBoxContainer" parent="MarginContainer/AspectRatioContainer/Items/Buttons" index="3"]
73+
layout_mode = 2
74+
75+
[node name="Language" parent="MarginContainer/AspectRatioContainer/Items/Buttons/OptionsContainer" index="0" instance=ExtResource("5_jwcs2")]
5976
unique_name_in_owner = true
6077
layout_mode = 2
6178
text = "MENU_OPTIONS_LANGUAGE"
6279

63-
[node name="ResetProgress" parent="MarginContainer/AspectRatioContainer/Items/Buttons" index="3" instance=ExtResource("5_jwcs2")]
80+
[node name="ResetProgress" parent="MarginContainer/AspectRatioContainer/Items/Buttons/OptionsContainer" index="1" instance=ExtResource("5_jwcs2")]
6481
layout_mode = 2
6582
text = "MENU_RESET_PROGRESS"
6683

67-
[connection signal="pressed" from="MarginContainer/AspectRatioContainer/Items/Buttons/Language" to="." method="_on_language_pressed"]
68-
[connection signal="pressed" from="MarginContainer/AspectRatioContainer/Items/Buttons/ResetProgress" to="." method="_on_reset_progress_pressed"]
84+
[connection signal="pressed" from="MarginContainer/AspectRatioContainer/Items/Buttons/OptionsContainer/Language" to="." method="_on_language_pressed"]
85+
[connection signal="pressed" from="MarginContainer/AspectRatioContainer/Items/Buttons/OptionsContainer/ResetProgress" to="." method="_on_reset_progress_pressed"]

src/scripts/ui/fps_slider.gd

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
extends HSlider
2+
#mostly copied from volume slider
3+
4+
@export var slide_name := "FPS limit: "
5+
@onready var label = $"../Label"
6+
7+
var client_hz = DisplayServer.screen_get_refresh_rate()
8+
var fps_limit_value: int
9+
10+
func _ready():
11+
max_value = client_hz * 2
12+
value = client_hz
13+
label.text = slide_name + str(int(client_hz))
14+
15+
func _on_value_changed(value):
16+
fps_limit_value = value
17+
18+
if fps_limit_value == 0:
19+
label.text = slide_name + "∞"
20+
else:
21+
label.text = slide_name + str(fps_limit_value)
22+
23+
func _on_drag_started():
24+
Engine.max_fps = client_hz
25+
26+
func _on_drag_ended(value_changed):
27+
Engine.max_fps = fps_limit_value

0 commit comments

Comments
 (0)