SchildDerStaerke/scripts/spawn_manager.gd

73 lines
2.2 KiB
GDScript

extends Node
@export var max_enemy := 3
@export var enemies_folder: Node
@export var enemies: Array[PackedScene]
@export var enemies_ui: PackedScene
@export var spawn_points: Array[SpawnPoint]
@export var enemies_ui_manager: Node
@export var spawn_points_container: Node
var player: Player
var current_enemies: Array[Enemy] = []
var enemy_number := 0
var enemy_ui_ready := false:
get:
return enemy_ui_ready
set(value):
enemy_ui_ready = value
if value:
enemy_count_changed()
func _ready() -> void:
player = get_tree().get_first_node_in_group("player")
if player == null:
print("Error: No player found!!")
func enemy_count_changed() -> void:
print("Enough enemies? " + str(current_enemies.size()) + "/" + str(max_enemy))
if current_enemies.size() < max_enemy:
var empty_spawn_points = find_empty_spawn_points()
if empty_spawn_points.size() == 0:
print("No free SpawnPoints found!")
else:
spawn_new_enemy(empty_spawn_points.pick_random())
enemy_count_changed()
else:
print("Enough enemies!")
func spawn_new_enemy(spawn_point: SpawnPoint) -> void:
var new_enemy = enemies.pick_random().instantiate() as Enemy
new_enemy.player = player
enemy_number += 1
new_enemy.name = new_enemy.name + str(enemy_number)
new_enemy.unit_name = new_enemy.name
print("Spawn " + new_enemy.unit_name + " on " + spawn_point.name)
new_enemy.position = spawn_point.position
new_enemy.unit_died.connect(_on_unit_died)
enemies_folder.add_child(new_enemy)
spawn_point.isFull = true
spawn_point.enemy = new_enemy
current_enemies.append(new_enemy)
enemies_ui_manager.update_enemies_ui(current_enemies)
func find_empty_spawn_points() -> Array[SpawnPoint]:
var empty_spawn_points: Array[SpawnPoint] = []
for spawn_point in spawn_points:
if not spawn_point.isFull:
empty_spawn_points.append(spawn_point)
return empty_spawn_points
func _on_unit_died(unit: Unit) -> void:
if unit is Enemy:
print(unit.unit_name + " died -> Remove from current_enemies.")
var index = current_enemies.find(unit)
if index != -1:
current_enemies.remove_at(index)
enemy_count_changed()
else:
print("Enemy is not in the list!")
else:
print("Something died which is not an enemy!")