SelectableSliderNode.gd 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. extends HBoxContainer
  2. @export var option_key := ""
  3. @export var title := ""
  4. @export var selected := false
  5. signal value_changed(new_value: int)
  6. var selected_index := 5
  7. var value := 0.5
  8. @onready var sfx: AudioStreamPlayer = $SFX
  9. func _ready() -> void:
  10. update_starting_values()
  11. func update_starting_values() -> void:
  12. selected_index = Settings.file.audio[option_key]
  13. func _process(_delta: float) -> void:
  14. if selected:
  15. handle_inputs()
  16. $Cursor.modulate.a = int(selected)
  17. $Value.text = generate_text()
  18. %Title.text = tr(title) + ":"
  19. $AutoScrollContainer.is_focused = selected
  20. func generate_text() -> String:
  21. var string := ""
  22. string += "◄" if selected and selected_index > 0 else " "
  23. string += "├"
  24. for i in 11:
  25. if i == selected_index:
  26. string += "┼"
  27. else:
  28. string += "-"
  29. string += "┤"
  30. string += "►" if selected and selected_index < 10 else " "
  31. return string
  32. func handle_inputs() -> void:
  33. var old := selected_index
  34. if Input.is_action_just_pressed("ui_left"):
  35. selected_index -= 1
  36. sfx.play()
  37. if Input.is_action_just_pressed("ui_right"):
  38. selected_index += 1
  39. sfx.play()
  40. selected_index = clamp(selected_index, 0, 10)
  41. if old != selected_index:
  42. value_changed.emit(selected_index)