extends Node2D @onready var health_bar: HealthBar = $HealthBar @onready var overlay: CanvasLayer = $Overlay @onready var transition: Transition = $Overlay/Transition @onready var spawn_timer: Timer = $Timer @onready var ui_root: Control = $UI/Root @onready var wave_label: Label = $UI/Root/WaveLabel @onready var main_menu: PackedScene = load("res://screens/main_menu.tscn") @onready var bot_scene: PackedScene = load("res://assets/scenes/bot.tscn") @onready var game_over_scene: PackedScene = load("res://assets/scenes/game_over.tscn") @onready var spawn_points: Array[Marker2D] = [ $EnemySpawns/EnemySpawn_1, $EnemySpawns/EnemySpawn_2, $EnemySpawns/EnemySpawn_3, ] enum Phase { PHASE_SETUP, PHASE_COMBAT, PHASE_LOOT, } var phase: Phase = Phase.PHASE_SETUP var waves_completed: int = 0: set(new_value): waves_completed = new_value wave_label.text = "WAVE: %d" % (new_value + 1) func _ready() -> void: waves_completed = 0 overlay.visible = true transition.slide_out() await transition.game_fully_visible spawn_bot() func _process(_delta: float) -> void: if Input.is_action_pressed("ui_cancel"): go_to_main_menu() func go_to_main_menu() -> void: var tree = get_tree() transition.text = "" tree.paused = true transition.slide_in() await transition.game_fully_hidden tree.change_scene_to_packed(main_menu) tree.paused = false func spawn_bot() -> void: var spawn = spawn_points.pick_random() var bot = bot_scene.instantiate() bot.global_position = spawn.global_position add_child(bot) func _on_timer_timeout() -> void: spawn_bot() func base_hit() -> void: health_bar.health -= 1 if health_bar.health == 0: game_over() func game_over() -> void: spawn_timer.stop() var foes = get_tree().get_nodes_in_group("foe") for foe in foes: foe.queue_free() var gos: GameOver = game_over_scene.instantiate() gos.message = "YOU DIED AFTER\nCOMPLETING %d WAVES!" % waves_completed ui_root.add_child(gos) await gos.closed go_to_main_menu() func _on_base_area_entered(area: Area2D) -> void: if area.is_in_group("foe") || area.is_in_group("foe_weapons"): base_hit()