Checkpoint.gd 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. class_name Checkpoint
  2. extends Node2D
  3. @export var nodes_to_delete: Array[Node] = []
  4. @export var optional := false
  5. signal crossed(player: Player)
  6. signal respawned
  7. static var passed := false
  8. static var respawn_position := Vector2.ZERO
  9. static var level := ""
  10. static var sublevel_id := 0
  11. static var old_state := [[], []]
  12. func _enter_tree() -> void:
  13. if passed:
  14. LevelPersistance.active_nodes = old_state.duplicate(true)
  15. func _ready() -> void:
  16. if [Global.GameMode.CHALLENGE, Global.GameMode.MARATHON_PRACTICE].has(Global.current_game_mode):
  17. queue_free()
  18. return
  19. if has_meta("is_flag") == false:
  20. hide()
  21. if Settings.file.difficulty.checkpoint_style != 0:
  22. queue_free()
  23. if passed and PipeArea.exiting_pipe_id == -1 and Global.current_game_mode != Global.GameMode.LEVEL_EDITOR and Level.vine_return_level == "":
  24. for i in nodes_to_delete:
  25. i.queue_free()
  26. for i in get_tree().get_nodes_in_group("Players"):
  27. i.global_position = self.global_position
  28. i.reset_physics_interpolation()
  29. i.recenter_camera()
  30. respawned.emit()
  31. func _exit_tree() -> void:
  32. pass
  33. func on_area_entered(area: Area2D) -> void:
  34. if area.owner is Player and not passed:
  35. var player: Player = area.owner
  36. player.passed_checkpoint()
  37. passed = true
  38. old_state = LevelPersistance.active_nodes.duplicate(true)
  39. Level.start_level_path = Global.current_level.scene_file_path
  40. if Global.current_game_mode == Global.GameMode.LEVEL_EDITOR or Global.current_game_mode == Global.GameMode.CUSTOM_LEVEL:
  41. sublevel_id = Global.level_editor.sub_level_id
  42. if Settings.file.difficulty.checkpoint_style == 2 and has_meta("is_flag"):
  43. if player.power_state.state_name == "Small":
  44. player.get_power_up("Big")
  45. respawn_position = global_position
  46. crossed.emit(area.owner)
  47. func on_tree_exiting() -> void:
  48. pass # Replace with function body.