WarpPipeArea.gd 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. @tool
  2. class_name WarpPipeArea
  3. extends PipeArea
  4. @export var world_num := 1:
  5. set(value):
  6. world_num = value
  7. update_visuals()
  8. @export var level_num := 1:
  9. set(value):
  10. level_num = value
  11. update_visuals()
  12. static var has_warped := false
  13. func _ready() -> void:
  14. update_visuals()
  15. has_warped = false
  16. func update_visuals() -> void:
  17. if Engine.is_editor_hint():
  18. $ArrowJoint.show()
  19. $ArrowJoint.rotation = get_vector(enter_direction).angle() - deg_to_rad(90)
  20. $ArrowJoint/Arrow.flip_v = exit_only
  21. $Node2D/CenterContainer/Label.text = str(world_num) + "-" + str(level_num)
  22. else:
  23. hide()
  24. func run_player_check(player: Player) -> void:
  25. if Global.player_action_pressed(get_input_direction(enter_direction), player.player_id) and can_enter:
  26. can_enter = false
  27. Checkpoint.passed = false
  28. SpeedrunHandler.is_warp_run = true
  29. Global.reset_values()
  30. Level.first_load = true
  31. has_warped = true
  32. player.enter_pipe(self, Global.current_game_mode != Global.GameMode.MARATHON_PRACTICE and Global.current_campaign != "SMBANN")
  33. if Global.current_game_mode == Global.GameMode.MARATHON_PRACTICE:
  34. SpeedrunHandler.run_finished()
  35. await get_tree().create_timer(1, false).timeout
  36. Global.open_marathon_results()
  37. return
  38. elif Global.current_campaign == "SMBANN":
  39. Global.current_level.get_node("DiscoLevel").level_finished()
  40. await get_tree().create_timer(1, false).timeout
  41. AudioManager.stop_all_music()
  42. Global.tally_time()
  43. await Global.score_tally_finished
  44. Global.open_disco_results()
  45. await Global.disco_level_continued
  46. Global.level_num = level_num
  47. Global.world_num = world_num
  48. LevelTransition.level_to_transition_to = Level.get_scene_string(Global.world_num, Global.level_num)
  49. return
  50. await owner.tree_exiting
  51. if Global.current_game_mode != Global.GameMode.MARATHON_PRACTICE:
  52. Global.level_num = level_num
  53. Global.world_num = world_num
  54. LevelTransition.level_to_transition_to = Level.get_scene_string(Global.world_num, Global.level_num)