80 lines
2.7 KiB
GDScript
80 lines
2.7 KiB
GDScript
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
|