|
|
|
|
@ -1,7 +1,7 @@
|
|
|
|
|
class_name SpawnManager extends Node
|
|
|
|
|
|
|
|
|
|
@export var max_enemy := 1
|
|
|
|
|
@export var spawn_points_array: Array[SpawnPoint]
|
|
|
|
|
@export var max_enemy := 3
|
|
|
|
|
@export var spawn_points: Array[SpawnPoint]
|
|
|
|
|
@export var enemies_folder: Node
|
|
|
|
|
@export var enemies: Array[PackedScene]
|
|
|
|
|
|
|
|
|
|
@ -12,31 +12,36 @@ var enemy_number := 0
|
|
|
|
|
|
|
|
|
|
func _ready() -> void:
|
|
|
|
|
enough_enemies()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func enough_enemies() -> void:
|
|
|
|
|
var foundSpawnPoint := false
|
|
|
|
|
while enemy_count < max_enemy:
|
|
|
|
|
for spawn_point in spawn_points_array:
|
|
|
|
|
if !spawn_point.isFull:
|
|
|
|
|
enemy_count += 1
|
|
|
|
|
spawn_new_enemy(spawn_point)
|
|
|
|
|
if enemy_count < max_enemy:
|
|
|
|
|
print("No free spawn point found for enemy!")
|
|
|
|
|
print("EnoughEnemies: " + str(enemy_count) + "/" + str(max_enemy))
|
|
|
|
|
var empty_spawn_points = find_empty_spawn_points(spawn_points)
|
|
|
|
|
if empty_spawn_points.size() == 0:
|
|
|
|
|
print("No free SpawnPoints found!")
|
|
|
|
|
break
|
|
|
|
|
spawn_new_enemy(empty_spawn_points.pick_random())
|
|
|
|
|
|
|
|
|
|
func spawn_new_enemy(spawn_point: SpawnPoint) -> void:
|
|
|
|
|
enemy_number += 1
|
|
|
|
|
var new_enemy = enemies.pick_random().instantiate() as Enemy
|
|
|
|
|
new_enemy.player = player
|
|
|
|
|
enemy_count += 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 + " at " + str(spawn_point.position))
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
func find_empty_spawn_points(spawn_points: Array[SpawnPoint]) -> Array[SpawnPoint]:
|
|
|
|
|
var empty_spawn_points: Array[SpawnPoint]
|
|
|
|
|
for spawn_point in spawn_points:
|
|
|
|
|
if !spawn_point.isFull: empty_spawn_points.append(spawn_point)
|
|
|
|
|
return empty_spawn_points
|
|
|
|
|
|
|
|
|
|
func _on_unit_died() -> void:
|
|
|
|
|
enemy_count -= 1
|
|
|
|
|
enough_enemies()
|
|
|
|
|
|