SelectableOptionLabel.gd 917 B

123456789101112131415161718192021222324252627282930
  1. extends HBoxContainer
  2. var selected := false
  3. @export var title := ""
  4. var selected_index := 0
  5. @export var values: Array[String] = []
  6. @export var add_colon := true
  7. signal value_changed(new_index: int)
  8. func _process(_delta: float) -> void:
  9. if selected:
  10. handle_inputs()
  11. $Title/Cursor.visible = (selected)
  12. $Title.text = tr(title) + (":" if add_colon else "")
  13. $Value.text = ("◄" if selected_index > 0 and selected else " ") + tr(str(values[selected_index])) + ("►" if selected_index < values.size() - 1 and selected else " ")
  14. func set_selected(active := false) -> void:
  15. selected = active
  16. func handle_inputs() -> void:
  17. var old := selected_index
  18. if Input.is_action_just_pressed("ui_left"):
  19. selected_index -= 1
  20. if Input.is_action_just_pressed("ui_right"):
  21. selected_index += 1
  22. selected_index = clamp(selected_index, 0, values.size() - 1)
  23. if old != selected_index:
  24. value_changed.emit(selected_index)