| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- extends HBoxContainer
- @export var option_key := ""
- @export var title := ""
- @export var value_descs: Array[String] = []
- @export var values := []
- @export var settings_category := "video"
- @export var selected := false
- signal value_changed(new_value)
- var selected_index := 0:
- set(value):
- selected_index = value
- func _ready() -> void:
- await get_tree().process_frame
- update_starting_values()
- func update_starting_values() -> void:
- if Settings.file.has(settings_category):
- if Settings.file[settings_category].has(option_key):
- if Settings.file[settings_category][option_key] is String:
- selected_index = values.find(Settings.file[settings_category][option_key])
- else:
- selected_index = Settings.file[settings_category][option_key]
- func _process(_delta: float) -> void:
- if selected:
- handle_inputs()
- $Cursor.modulate.a = int(selected)
- for i in [$AutoScrollContainer, %AutoScrollContainer2]:
- i.is_focused = selected
- %Title.text = tr(title) + ":"
- %Value.text = tr(str(values[selected_index]))
- %LeftArrow.modulate.a = int(selected and selected_index > 0)
- %RightArrow.modulate.a = int(selected and selected_index < values.size() - 1)
- func set_selected(active := false) -> void:
- selected = active
- func handle_inputs() -> void:
- var old := selected_index
- if Input.is_action_just_pressed("ui_left"):
- selected_index -= 1
- if Settings.file.audio.extra_sfx == 1:
- AudioManager.play_global_sfx("menu_move")
- if Input.is_action_just_pressed("ui_right"):
- selected_index += 1
- if Settings.file.audio.extra_sfx == 1:
- AudioManager.play_global_sfx("menu_move")
- selected_index = clamp(selected_index, 0, values.size() - 1)
- if old != selected_index:
- value_changed.emit(selected_index)
-
|