BooRaceMenu.gd 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. extends Node
  2. static var selected_index := 0
  3. var active := true
  4. var boo_index := 0
  5. const levels := {
  6. "SMB1": SMB1_LEVELS,
  7. "SMBLL": SMBLL_LEVELS,
  8. "SMBS": SMBS_LEVELS
  9. }
  10. const SMB1_LEVELS := [
  11. "res://Scenes/Levels/SMB1/YouVSBoo/Boo1-1.tscn",
  12. "res://Scenes/Levels/SMB1/YouVSBoo/Boo1-2.tscn",
  13. "res://Scenes/Levels/SMB1/YouVSBoo/Boo1-3.tscn",
  14. "res://Scenes/Levels/SMB1/YouVSBoo/Boo1-4.tscn",
  15. "res://Scenes/Levels/SMB1/YouVSBoo/Boo2-1.tscn",
  16. "res://Scenes/Levels/SMB1/YouVSBoo/Boo2-2.tscn",
  17. "res://Scenes/Levels/SMB1/YouVSBoo/Boo2-3.tscn",
  18. "res://Scenes/Levels/SMB1/YouVSBoo/Boo2-4.tscn"
  19. ]
  20. const SMBLL_LEVELS := [
  21. "res://Scenes/Levels/SMBLL/YouVSBoo/Boo1-1.tscn",
  22. "res://Scenes/Levels/SMBLL/YouVSBoo/Boo1-2.tscn",
  23. "res://Scenes/Levels/SMBLL/YouVSBoo/Boo1-3.tscn",
  24. "res://Scenes/Levels/SMBLL/YouVSBoo/Boo1-4.tscn",
  25. "res://Scenes/Levels/SMBLL/YouVSBoo/Boo2-1.tscn",
  26. "res://Scenes/Levels/SMBLL/YouVSBoo/Boo2-2.tscn",
  27. "res://Scenes/Levels/SMBLL/YouVSBoo/Boo2-3.tscn",
  28. "res://Scenes/Levels/SMBLL/YouVSBoo/Boo2-4.tscn",
  29. ]
  30. const SMBS_LEVELS := [
  31. "res://Scenes/Levels/SMBS/YouVsBoo/Boo1-1.tscn",
  32. "res://Scenes/Levels/SMBS/YouVsBoo/Boo1-2.tscn",
  33. "res://Scenes/Levels/SMBS/YouVsBoo/Boo1-3.tscn",
  34. "res://Scenes/Levels/SMBS/YouVsBoo/Boo1-4.tscn",
  35. "res://Scenes/Levels/SMBS/YouVsBoo/Boo2-1.tscn",
  36. "res://Scenes/Levels/SMBS/YouVsBoo/Boo2-2.tscn",
  37. "res://Scenes/Levels/SMBS/YouVsBoo/Boo2-3.tscn",
  38. "res://Scenes/Levels/SMBS/YouVsBoo/Boo2-4.tscn"
  39. ]
  40. func _ready() -> void:
  41. AudioManager.stop_all_music()
  42. Global.player_power_states = "0000"
  43. Global.get_node("GameHUD").hide()
  44. boo_index = BooRaceHandler.boo_colour
  45. Global.current_game_mode = Global.GameMode.BOO_RACE
  46. Global.reset_values()
  47. LevelPersistance.reset_states()
  48. Level.first_load = true
  49. Level.can_set_time = true
  50. setup_visuals()
  51. %LevelLabels.get_child(BooRaceHandler.current_level_id).grab_focus()
  52. func _exit_tree() -> void:
  53. Global.get_node("GameHUD").show()
  54. func setup_visuals() -> void:
  55. for i in %LevelLabels.get_child_count():
  56. if i >= 1:
  57. var level_unlocked = int(BooRaceHandler.cleared_boo_levels[i - 1]) > 0
  58. %LevelLabels.get_child(i).modulate = Color.WHITE if level_unlocked else Color.DIM_GRAY
  59. %LevelLabels.get_child(i).get_node("Control/Sprite2D").visible = level_unlocked
  60. if int(BooRaceHandler.cleared_boo_levels[i]) > 0:
  61. %LevelLabels.get_child(i).get_node("Control/Sprite2D").frame = clamp(int(BooRaceHandler.cleared_boo_levels[i]), 0, 4)
  62. %LevelLabels.get_child(i).get_node("Control/Sprite2D").modulate = Color.DIM_GRAY if int(BooRaceHandler.cleared_boo_levels[i]) >= 5 else Color.WHITE
  63. for i in %Boos.get_children():
  64. if i is Node2D:
  65. i.visible = $BooSelect.selected_boo == int(i.name)
  66. i.modulate = Color.BLACK if int(BooRaceHandler.cleared_boo_levels[selected_index]) < int(i.name) else Color.WHITE
  67. if int(BooRaceHandler.cleared_boo_levels[selected_index]) > int(i.name):
  68. i.modulate = Color.DIM_GRAY
  69. i.play("Lose" if int(BooRaceHandler.cleared_boo_levels[selected_index]) > int(i.name) else "Idle")
  70. func _process(_delta: float) -> void:
  71. handle_input()
  72. $BooSelect.lvl_idx = selected_index
  73. func open() -> void:
  74. active = true
  75. func set_current_level_idx(new_idx := 0) -> void:
  76. selected_index = new_idx
  77. update_pb()
  78. func update_pb() -> void:
  79. var pb_string := "--:--:--"
  80. if BooRaceHandler.best_times[selected_index] >= 0:
  81. pb_string = SpeedrunHandler.gen_time_string(SpeedrunHandler.format_time(BooRaceHandler.best_times[selected_index]))
  82. %PB.text = "PB: " + pb_string
  83. func handle_input() -> void:
  84. if active == false:
  85. return
  86. if Input.is_action_just_pressed("ui_back"):
  87. Global.transition_to_scene("res://Scenes/Levels/TitleScreen.tscn")
  88. if Input.is_action_just_pressed("ui_accept"):
  89. level_selected()
  90. func regrab_focus() -> void:
  91. %LevelLabels.get_child(selected_index).grab_focus()
  92. func level_selected() -> void:
  93. if selected_index > 0:
  94. if int(BooRaceHandler.cleared_boo_levels[selected_index - 1]) <= 0 and not Global.debug_mode:
  95. AudioManager.play_global_sfx("bump")
  96. return
  97. active = false
  98. Global.reset_values()
  99. Global.clear_saved_values()
  100. ResourceSetter.cache.clear()
  101. ResourceSetterNew.cache.clear()
  102. $BooSelect.open()
  103. await $CharacterSelect.selected
  104. Global.transition_to_scene(levels[Global.current_campaign][selected_index])