BooSelect.gd 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. extends Control
  2. @onready var cursor: Label = %Cursor
  3. var selected_boo := 0
  4. var active := false
  5. var lvl_idx := 0
  6. signal boo_selected
  7. signal cancelled
  8. signal boo_changed
  9. @onready var boos := [%Boo1, %Boo2, %Boo3, %Boo4, %Boo5]
  10. func _process(_delta: float) -> void:
  11. if active:
  12. handle_input()
  13. BooRaceHandler.boo_colour = selected_boo
  14. for i in boos:
  15. i.get_node("Cursor").visible = selected_boo == i.get_index()
  16. func open() -> void:
  17. grab_focus()
  18. selected_boo = int(BooRaceHandler.cleared_boo_levels[lvl_idx])
  19. update_visuals()
  20. show()
  21. await get_tree().process_frame
  22. active = true
  23. func update_visuals() -> void:
  24. var idx := 0
  25. for i in boos:
  26. i.modulate = Color.WHITE if (int(BooRaceHandler.cleared_boo_levels[lvl_idx]) >= idx or Global.debug_mode) else Color.DIM_GRAY
  27. idx += 1
  28. func handle_input() -> void:
  29. var old_colour = selected_boo
  30. if Input.is_action_just_pressed("ui_left"):
  31. selected_boo -= 1
  32. if Input.is_action_just_pressed("ui_right"):
  33. selected_boo += 1
  34. selected_boo = clamp(selected_boo, 0, 4)
  35. BooRaceHandler.boo_colour = selected_boo
  36. if old_colour != selected_boo:
  37. print(selected_boo)
  38. boo_changed.emit()
  39. if Input.is_action_just_pressed("ui_back"):
  40. cancelled.emit()
  41. close()
  42. if Input.is_action_just_pressed("ui_accept"):
  43. if int(BooRaceHandler.cleared_boo_levels[lvl_idx]) < selected_boo and not Global.debug_mode:
  44. AudioManager.play_sfx("bump")
  45. else:
  46. select_world()
  47. func select_world() -> void:
  48. boo_selected.emit()
  49. close()
  50. func close() -> void:
  51. active = false
  52. hide()