limboai/demo/demo/scenes/game.gd

88 lines
2.7 KiB
GDScript

extends Node2D
const Simple := preload("res://demo/agents/01_agent_melee_simple.tscn")
const Charger := preload("res://demo/agents/02_agent_charger.tscn")
const Imp := preload("res://demo/agents/03_agent_imp.tscn")
const Skirmisher := preload("res://demo/agents/04_agent_skirmisher.tscn")
const Ranged := preload("res://demo/agents/05_agent_ranged.tscn")
const Combo := preload("res://demo/agents/06_agent_melee_combo.tscn")
const Nuanced := preload("res://demo/agents/07_agent_melee_nuanced.tscn")
const Demon := preload("res://demo/agents/08_agent_demon.tscn")
const Summoner := preload("res://demo/agents/09_agent_summoner.tscn")
const WAVES: Array = [
[Simple, Simple, Nuanced],
[Simple, Nuanced, Charger],
[Simple, Simple, Ranged, Nuanced],
[Simple, Simple, Summoner],
[Ranged, Skirmisher, Nuanced, Simple],
[Nuanced, Nuanced, Combo, Ranged],
[Demon, Charger, Simple, Simple, Skirmisher],
[Demon, Nuanced, Combo, Demon],
[Summoner, Ranged, Nuanced, Nuanced, Ranged, Skirmisher],
[Demon, Demon, Summoner, Skirmisher, Nuanced, Nuanced, Combo],
]
@export var wave_index: int = -1
@export var agents_alive: int = 0
@onready var gong: StaticBody2D = $Gong
@onready var player: CharacterBody2D = $Player
@onready var spawn_points: Node2D = $SpawnPoints
@onready var hp_bar: TextureProgressBar = %HPBar
@onready var round_counter: Label = %RoundCounter
func _ready() -> void:
hp_bar.max_value = player.get_health().max_health
player.get_health().damaged.connect(func(_a,_b): hp_bar.value = player.get_health().get_current())
player.death.connect(_on_player_death)
round_counter.hide()
func _update_round_counter() -> void:
round_counter.show()
round_counter.text = "Round %s/%s" % [wave_index + 1, WAVES.size()]
func _on_gong_gong_struck() -> void:
_start_round()
func _start_round() -> void:
wave_index += 1
if wave_index >= WAVES.size():
player.set_victorious()
round_counter.text = "Victorious!"
return
await get_tree().create_timer(3.0).timeout
_update_round_counter()
var spawns: Array = spawn_points.get_children()
spawns.shuffle()
for i in WAVES[wave_index].size():
var agent_resource: PackedScene = WAVES[wave_index][i]
var agent: CharacterBody2D = agent_resource.instantiate()
add_child(agent)
agent.global_position = spawns[i].global_position
agent.death.connect(_on_agent_death)
agent.play_summoning_effect()
agents_alive += 1
func _on_agent_death() -> void:
agents_alive -= 1
if agents_alive == 0:
_start_round()
func _on_player_death() -> void:
await get_tree().create_timer(3.0).timeout
get_tree().reload_current_scene()
func _on_switch_to_showcase_pressed() -> void:
get_tree().change_scene_to_file("res://demo/scenes/showcase.tscn")