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!")