game.gd 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. extends Node2D
  2. @onready var health_bar: HealthBar = $HealthBar
  3. @onready var overlay: CanvasLayer = $Overlay
  4. @onready var transition: Transition = $Overlay/Transition
  5. @onready var spawn_timer: Timer = $Timer
  6. @onready var ui_root: Control = $UI/Root
  7. @onready var wave_label: Label = $UI/Root/WaveLabel
  8. @onready var main_menu: PackedScene = load("res://screens/main_menu.tscn")
  9. @onready var bot_scene: PackedScene = load("res://assets/scenes/bot.tscn")
  10. @onready var game_over_scene: PackedScene = load("res://assets/scenes/game_over.tscn")
  11. @onready var spawn_points: Array[Marker2D] = [
  12. $EnemySpawns/EnemySpawn_1,
  13. $EnemySpawns/EnemySpawn_2,
  14. $EnemySpawns/EnemySpawn_3,
  15. ]
  16. enum Phase {
  17. PHASE_SETUP,
  18. PHASE_COMBAT,
  19. PHASE_LOOT,
  20. }
  21. var phase: Phase = Phase.PHASE_SETUP
  22. var waves_completed: int = 0:
  23. set(new_value):
  24. waves_completed = new_value
  25. wave_label.text = "WAVE: %d" % (new_value + 1)
  26. func _ready() -> void:
  27. waves_completed = 0
  28. overlay.visible = true
  29. transition.slide_out()
  30. await transition.game_fully_visible
  31. spawn_bot()
  32. func _process(_delta: float) -> void:
  33. if Input.is_action_pressed("ui_cancel"):
  34. go_to_main_menu()
  35. func go_to_main_menu() -> void:
  36. var tree = get_tree()
  37. transition.text = ""
  38. tree.paused = true
  39. transition.slide_in()
  40. await transition.game_fully_hidden
  41. tree.change_scene_to_packed(main_menu)
  42. tree.paused = false
  43. func spawn_bot() -> void:
  44. var spawn = spawn_points.pick_random()
  45. var bot = bot_scene.instantiate()
  46. bot.global_position = spawn.global_position
  47. add_child(bot)
  48. func _on_timer_timeout() -> void:
  49. spawn_bot()
  50. func base_hit() -> void:
  51. health_bar.health -= 1
  52. if health_bar.health == 0:
  53. game_over()
  54. func game_over() -> void:
  55. spawn_timer.stop()
  56. var foes = get_tree().get_nodes_in_group("foe")
  57. for foe in foes:
  58. foe.queue_free()
  59. var gos: GameOver = game_over_scene.instantiate()
  60. gos.message = "YOU DIED AFTER\nCOMPLETING %d WAVES!" % waves_completed
  61. ui_root.add_child(gos)
  62. await gos.closed
  63. go_to_main_menu()
  64. func _on_base_area_entered(area: Area2D) -> void:
  65. if area.is_in_group("foe") || area.is_in_group("foe_weapons"):
  66. base_hit()