Browse Source

Adding FOV setting

pull/11/head
Ryan Reed 1 month ago
parent
commit
d0cce1b2dd
4 changed files with 46 additions and 1 deletions
  1. +7
    -0
      autoloads/globals.gd
  2. +8
    -0
      scenes/player/player.gd
  3. +6
    -0
      scenes/ui/menus/settings_menu.gd
  4. +25
    -1
      scenes/ui/menus/settings_menu.tscn

+ 7
- 0
autoloads/globals.gd View File

@ -2,6 +2,7 @@ extends Node
signal graphics_settings_changed(resolution: Vector2, fullscreen: bool, vsync: bool)
signal graphics_fov_changed(fov: int)
const BLOCK_PREFAB: PackedScene = preload("res://scenes/blocks/block.tscn")
@ -11,8 +12,10 @@ const DROPPED_BLOCK_PREFAB: PackedScene = preload("res://scenes/blocks/dropped_b
var enable_waila: bool = true ## Enable `What Am I Looking At` UI
var enable_block_highlight: bool = true
# TODO: Replace the following with a Resource
var graphics_settings: Dictionary[String, Variant] = {
"resolution": Vector2i.ZERO,
"fov": 75,
"fullscreen": false,
"vsync": false,
}
@ -20,6 +23,7 @@ var graphics_settings: Dictionary[String, Variant] = {
func _init() -> void:
graphics_settings_changed.connect(_on_graphics_settings_changed)
graphics_fov_changed.connect(_on_graphics_fov_changed)
func apply_graphics_settings() -> void:
@ -36,6 +40,9 @@ func apply_graphics_settings() -> void:
DisplayServer.window_set_vsync_mode(DisplayServer.VSYNC_DISABLED)
func _on_graphics_fov_changed(fov: int) -> void:
graphics_settings.fov = fov
func _on_graphics_settings_changed(resolution: Vector2i, fullscreen: bool, vsync: bool) -> void:
graphics_settings.resolution = resolution
graphics_settings.fullscreen = fullscreen


+ 8
- 0
scenes/player/player.gd View File

@ -17,6 +17,7 @@ extends CharacterBody3D
@export var sprint_toggle: bool = false ## Enables toggle sprint instead of hold. When enabled, sprinting will also be disabled when velocity is zero
@export var walk_speed: float = 5.0
@onready var camera: Camera3D = $Head/Camera3D
@onready var head: Node3D = $Head
@onready var collision_shape_standing: CollisionShape3D = $CollisionShapeStanding
@onready var collision_shape_crouching: CollisionShape3D = $CollisionShapeCrouching
@ -47,6 +48,9 @@ func _physics_process(delta: float) -> void:
move_and_slide()
func _ready() -> void:
Globals.graphics_fov_changed.connect(_on_graphics_fov_changed)
func _apply_gravity(delta: float) -> void:
if is_on_floor(): return
@ -115,3 +119,7 @@ func _set_is_sprinting() -> void:
is_sprinting = false
else:
is_sprinting = Input.is_action_pressed("run")
func _on_graphics_fov_changed(fov: int) -> void:
camera.fov = fov

+ 6
- 0
scenes/ui/menus/settings_menu.gd View File

@ -6,6 +6,8 @@ extends Panel
@export var resolution_input: OptionButton
@export var fullscreen_input: CheckBox
@export var vsync_input: CheckBox
@export var fov_slider: HSlider
@export var fov_value_label: Label
#region Game Settings
@ -17,6 +19,9 @@ func _on_enable_waila_toggled(toggled_on: bool) -> void:
#endregion
#region Graphics Settings
func _on_fov_slider_changed(value: float) -> void:
fov_value_label.text = str(int(value))
func _on_graphics_apply_button_pressed() -> void:
var values: Array = resolution_input.text.split_floats("x")
Globals.graphics_settings_changed.emit(
@ -24,6 +29,7 @@ func _on_graphics_apply_button_pressed() -> void:
fullscreen_input.button_pressed,
vsync_input.button_pressed
)
Globals.graphics_fov_changed.emit(int(fov_slider.value))
#endregion
#region Audio Settings


+ 25
- 1
scenes/ui/menus/settings_menu.tscn View File

@ -14,7 +14,7 @@ corner_radius_top_right = 2
corner_radius_bottom_right = 2
corner_radius_bottom_left = 2
[node name="SettingsMenu" type="Panel" node_paths=PackedStringArray("resolution_input", "fullscreen_input", "vsync_input")]
[node name="SettingsMenu" type="Panel" node_paths=PackedStringArray("resolution_input", "fullscreen_input", "vsync_input", "fov_slider", "fov_value_label")]
process_mode = 3
anchors_preset = 15
anchor_right = 1.0
@ -25,6 +25,8 @@ script = ExtResource("1_qwcqe")
resolution_input = NodePath("Background/MarginContainer/VBoxContainer/TabContainer/Graphics/Resolution/OptionButton")
fullscreen_input = NodePath("Background/MarginContainer/VBoxContainer/TabContainer/Graphics/Fullscreen/CheckBox")
vsync_input = NodePath("Background/MarginContainer/VBoxContainer/TabContainer/Graphics/VSync/CheckBox")
fov_slider = NodePath("Background/MarginContainer/VBoxContainer/TabContainer/Graphics/FOV/HSlider")
fov_value_label = NodePath("Background/MarginContainer/VBoxContainer/TabContainer/Graphics/FOV/Value")
metadata/_edit_vertical_guides_ = [349.0]
[node name="Background" type="ColorRect" parent="."]
@ -148,6 +150,27 @@ text = "VSync"
[node name="CheckBox" type="CheckBox" parent="Background/MarginContainer/VBoxContainer/TabContainer/Graphics/VSync"]
layout_mode = 2
[node name="FOV" type="HBoxContainer" parent="Background/MarginContainer/VBoxContainer/TabContainer/Graphics"]
layout_mode = 2
[node name="Label" type="Label" parent="Background/MarginContainer/VBoxContainer/TabContainer/Graphics/FOV"]
layout_mode = 2
size_flags_horizontal = 3
text = "FOV"
[node name="HSlider" type="HSlider" parent="Background/MarginContainer/VBoxContainer/TabContainer/Graphics/FOV"]
layout_mode = 2
size_flags_horizontal = 3
min_value = 60.0
max_value = 120.0
value = 75.0
rounded = true
ticks_on_borders = true
[node name="Value" type="Label" parent="Background/MarginContainer/VBoxContainer/TabContainer/Graphics/FOV"]
layout_mode = 2
text = "75"
[node name="HSeparator" type="HSeparator" parent="Background/MarginContainer/VBoxContainer/TabContainer/Graphics"]
layout_mode = 2
theme_override_constants/separation = 20
@ -191,5 +214,6 @@ text = "Close Settings"
[connection signal="toggled" from="Background/MarginContainer/VBoxContainer/TabContainer/Game/BlockHighlight/CheckButton" to="." method="_on_block_highlighting_toggled"]
[connection signal="toggled" from="Background/MarginContainer/VBoxContainer/TabContainer/Game/Waila/CheckButton" to="." method="_on_enable_waila_toggled"]
[connection signal="value_changed" from="Background/MarginContainer/VBoxContainer/TabContainer/Graphics/FOV/HSlider" to="." method="_on_fov_slider_changed"]
[connection signal="pressed" from="Background/MarginContainer/VBoxContainer/TabContainer/Graphics/CenterContainer/ApplyButton" to="." method="_on_graphics_apply_button_pressed"]
[connection signal="pressed" from="Background/BottomRow/CloseButton" to="." method="_on_close_button_pressed"]

Loading…
Cancel
Save