MarathonResults.gd 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. extends Control
  2. var selected_index := 0
  3. func setup_visuals() -> void:
  4. %Time.text = SpeedrunHandler.gen_time_string(SpeedrunHandler.format_time(SpeedrunHandler.timer))
  5. var best_time = SpeedrunHandler.best_time
  6. if best_time <= 0 or SpeedrunHandler.best_time > SpeedrunHandler.timer:
  7. best_time = SpeedrunHandler.timer
  8. AudioManager.stop_all_music()
  9. $PBSfx.play()
  10. %PB.text = SpeedrunHandler.gen_time_string(SpeedrunHandler.format_time(best_time))
  11. %NewPB.visible = SpeedrunHandler.timer < SpeedrunHandler.best_time or SpeedrunHandler.best_time <= 0
  12. var target_time = -1
  13. %LevelSelect.visible = Global.current_game_mode == Global.GameMode.MARATHON_PRACTICE
  14. if Global.current_game_mode == Global.GameMode.MARATHON_PRACTICE:
  15. if SpeedrunHandler.is_warp_run:
  16. target_time = SpeedrunHandler.LEVEL_GOLD_ANY_TIMES[Global.current_campaign][str(Global.world_num) + "-" + str(Global.level_num)]
  17. else:
  18. target_time = SpeedrunHandler.LEVEL_GOLD_WARPLESS_TIMES[Global.current_campaign][Global.world_num - 1][Global.level_num - 1]
  19. else:
  20. if SpeedrunHandler.is_warp_run:
  21. target_time = SpeedrunHandler.GOLD_ANY_TIMES[Global.current_campaign]
  22. else:
  23. target_time = SpeedrunHandler.GOLD_WARPLESS_TIMES[Global.current_campaign]
  24. %Target.text = SpeedrunHandler.gen_time_string(SpeedrunHandler.format_time(target_time))
  25. var medal_index := -1
  26. if SpeedrunHandler.timer < target_time:
  27. medal_index = 2
  28. elif SpeedrunHandler.timer < target_time * SpeedrunHandler.MEDAL_CONVERSIONS[1]:
  29. medal_index = 1
  30. elif SpeedrunHandler.timer < target_time * SpeedrunHandler.MEDAL_CONVERSIONS[0]:
  31. medal_index = 0
  32. %Medal.get_node("Full").visible = medal_index >= 0
  33. %Medal.get_node("Full").region_rect.position = Vector2(8 * medal_index, 0)
  34. if medal_index >= 0:
  35. %Time.modulate = [Color("C6691D"), Color("BCBCBC"), Color("FFB259")][medal_index]
  36. else:
  37. %Time.modulate = Color.WHITE
  38. func open() -> void:
  39. set_focus(true)
  40. setup_visuals()
  41. show()
  42. return_focus()
  43. func return_focus() -> void:
  44. await get_tree().physics_frame
  45. [%Restart, %LevelSelect, %Return][selected_index].grab_focus()
  46. func check_for_warp() -> void:
  47. SpeedrunHandler.is_warp_run = false
  48. if SpeedrunHandler.WARP_LEVELS[Global.current_campaign].has(str(Global.world_num) + "-" + str(Global.level_num)) or Global.current_game_mode == Global.GameMode.MARATHON:
  49. $SpeedrunTypeSelect.open()
  50. else:
  51. restart_level()
  52. func set_focus(enabled := false) -> void:
  53. for i in [%Restart, %LevelSelect, %Return]:
  54. i.focus_mode = 0 if enabled == false else 2
  55. func check_for_warp_level_select_edition() -> void:
  56. SpeedrunHandler.is_warp_run = false
  57. if SpeedrunHandler.WARP_LEVELS[Global.current_campaign].has(str(Global.world_num) + "-" + str(Global.level_num)):
  58. $SpeedrunTypeSelectLevelSelect.open()
  59. else:
  60. restart_level()
  61. func restart_level() -> void:
  62. var path := ""
  63. SpeedrunHandler.timer = 0
  64. Global.reset_values()
  65. Global.clear_saved_values()
  66. if Global.current_game_mode == Global.GameMode.MARATHON_PRACTICE:
  67. path = Level.get_scene_string(Global.world_num, Global.level_num)
  68. else:
  69. Global.world_num = 1
  70. Global.level_num = 1
  71. path = Level.get_scene_string(1, 1)
  72. SpeedrunHandler.best_time = SpeedrunHandler.get_best_time()
  73. Level.start_level_path = path
  74. LevelTransition.level_to_transition_to = path
  75. Global.transition_to_scene("res://Scenes/Levels/LevelTransition.tscn")
  76. close()
  77. func go_to_menu() -> void:
  78. Global.transition_to_scene("res://Scenes/Levels/TitleScreen.tscn")
  79. func close() -> void:
  80. hide()