MenuIndicator.gd 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. extends Control
  2. @onready var content : Control = $MenuContent
  3. @onready var items : Control = $MenuContent/HBoxItems
  4. @onready var button : Button = $MenuButton
  5. var progress_speed : float = 0.0
  6. const menu_speed : float = 1.1
  7. var is_playing : bool = false
  8. var is_opening : bool = false
  9. #
  10. func SetItemsVisible(toggle : bool):
  11. for w in items.get_children():
  12. w.set_visible(toggle)
  13. if w.targetWindow and not toggle:
  14. w.targetWindow.EnableControl(toggle)
  15. #
  16. func _on_button_pressed():
  17. is_playing = true
  18. is_opening = !is_opening
  19. if is_opening and not items.is_visible():
  20. items.set_visible(true)
  21. #
  22. func _ready():
  23. assert(content != null and content.material != null and items != null, "Menu Indicator nodes are not set correctly")
  24. content.material.set_shader_parameter("progress", progress_speed)
  25. items.set_visible(false)
  26. func _process(delta : float):
  27. if is_playing:
  28. if is_opening:
  29. progress_speed += delta * menu_speed
  30. if progress_speed >= 1.0:
  31. progress_speed = 1.0
  32. is_playing = false
  33. else:
  34. progress_speed -= delta * menu_speed
  35. if progress_speed <= 0.0:
  36. items.set_visible(false)
  37. progress_speed = 0.0
  38. is_playing = false
  39. if content.material:
  40. content.material.set_shader_parameter("progress", progress_speed)