MarathonSelect.gd 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. extends Control
  2. signal full_run_selected
  3. signal level_run_selected
  4. signal cancelled
  5. var selected := 0
  6. var active := false
  7. func open() -> void:
  8. setup_visuals()
  9. [$PanelContainer/VBoxContainer/HBoxContainer/Full, $PanelContainer/VBoxContainer/HBoxContainer/Level][selected].grab_focus()
  10. show()
  11. await get_tree().process_frame
  12. active = true
  13. func close() -> void:
  14. hide()
  15. active = false
  16. func _process(_delta: float) -> void:
  17. if active:
  18. if Input.is_action_just_pressed("ui_accept"):
  19. [full_run_selected, level_run_selected][selected].emit()
  20. Global.current_game_mode = [Global.GameMode.MARATHON, Global.GameMode.MARATHON_PRACTICE][selected]
  21. close()
  22. elif Input.is_action_just_pressed("ui_back"):
  23. close()
  24. cancelled.emit()
  25. if Input.is_action_just_pressed("ui_left"):
  26. selected -= 1
  27. if Input.is_action_just_pressed("ui_right"):
  28. selected += 1
  29. selected = clamp(selected, 0, 1)
  30. %MarathonName.text = ["MARATHON_FULL", "MARATHON_LEVEL"][selected]
  31. for i in [$PanelContainer/VBoxContainer/HBoxContainer/Full, $PanelContainer/VBoxContainer/HBoxContainer/Level]:
  32. i.get_node("Label").visible = selected == i.get_index()
  33. func setup_visuals() -> void:
  34. if SpeedrunHandler.marathon_best_warpless_time <= 0:
  35. %FullRunPB.text = "--:--:--"
  36. else:
  37. %FullRunPB.text = SpeedrunHandler.gen_time_string(SpeedrunHandler.format_time(SpeedrunHandler.marathon_best_warpless_time))
  38. if SpeedrunHandler.marathon_best_any_time <= 0:
  39. %WarpedRunPB.text = "--:--:--"
  40. else:
  41. %WarpedRunPB.text = SpeedrunHandler.gen_time_string(SpeedrunHandler.format_time(SpeedrunHandler.marathon_best_any_time))
  42. for i in %FullMedals.get_children():
  43. i.get_node("Full").visible = SpeedrunHandler.marathon_best_warpless_time <= SpeedrunHandler.GOLD_WARPLESS_TIMES[Global.current_campaign] * SpeedrunHandler.MEDAL_CONVERSIONS[i.get_index()] and SpeedrunHandler.marathon_best_warpless_time > 0
  44. for i in %WarpedMedals.get_children():
  45. i.get_node("Full").visible = SpeedrunHandler.marathon_best_any_time <= SpeedrunHandler.GOLD_ANY_TIMES[Global.current_campaign] * SpeedrunHandler.MEDAL_CONVERSIONS[i.get_index()] and SpeedrunHandler.marathon_best_any_time > 0