netfishing/ui/settings_panel.gd

81 lines
2.7 KiB
GDScript3
Raw Permalink Normal View History

class_name SettingsPanel
extends PanelContainer
const SettingsManagerType = preload(
"res://settings/player_settings_manager.gd"
)
signal applied
signal closed
@onready var _auto_click_toggle: CheckButton = %AutoClickToggle
@onready var _auto_click_interval: HSlider = %AutoClickInterval
@onready var _auto_click_interval_value: Label = %AutoClickIntervalValue
@onready var _mouse_sensitivity: HSlider = %MouseSensitivity
@onready var _mouse_sensitivity_value: Label = %MouseSensitivityValue
@onready var _controller_sensitivity: HSlider = %ControllerSensitivity
@onready var _controller_sensitivity_value: Label = %ControllerSensitivityValue
@onready var _invert_y_toggle: CheckButton = %InvertYToggle
@onready var _feedback: Label = %SettingsFeedback
var _settings_manager: SettingsManagerType
func _ready() -> void:
%ApplySettingsButton.pressed.connect(_apply_settings)
%CancelSettingsButton.pressed.connect(close_panel)
_auto_click_interval.value_changed.connect(_refresh_value_labels)
_mouse_sensitivity.value_changed.connect(_refresh_value_labels)
_controller_sensitivity.value_changed.connect(_refresh_value_labels)
func open_panel(settings_manager: SettingsManagerType) -> void:
_settings_manager = settings_manager
_load_controls()
_feedback.text = ""
show()
_auto_click_toggle.grab_focus()
func close_panel() -> void:
if not visible:
return
hide()
_load_controls()
closed.emit()
func _apply_settings() -> void:
if _settings_manager == null:
_feedback.text = "Settings are unavailable."
return
var edited := PlayerSettings.new()
edited.auto_click_enabled = _auto_click_toggle.button_pressed
edited.auto_click_interval = float(_auto_click_interval.value)
edited.mouse_camera_sensitivity = float(_mouse_sensitivity.value)
edited.controller_camera_sensitivity = float(_controller_sensitivity.value)
edited.invert_camera_y = _invert_y_toggle.button_pressed
if _settings_manager.apply_settings(edited):
hide()
applied.emit()
else:
_feedback.text = "Failed to save settings."
func _load_controls() -> void:
if _settings_manager == null or not is_node_ready():
return
var settings: PlayerSettings = _settings_manager.current_settings
_auto_click_toggle.button_pressed = settings.auto_click_enabled
_auto_click_interval.value = settings.auto_click_interval
_mouse_sensitivity.value = settings.mouse_camera_sensitivity
_controller_sensitivity.value = settings.controller_camera_sensitivity
_invert_y_toggle.button_pressed = settings.invert_camera_y
_refresh_value_labels(0.0)
func _refresh_value_labels(_unused: float) -> void:
_auto_click_interval_value.text = "%.2f s" % _auto_click_interval.value
_mouse_sensitivity_value.text = "%.4f" % _mouse_sensitivity.value
_controller_sensitivity_value.text = "%.1f" % _controller_sensitivity.value