123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- 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()
|