46 lines
1.3 KiB
GDScript
46 lines
1.3 KiB
GDScript
extends Node3D
|
|
|
|
const SPAWN_RANDOM_POSITION_RANGE = 10
|
|
const SPAWN_RANDOM_ANGLE_RANGE = PI/8
|
|
|
|
@export var delay : float = 5.
|
|
@export var duration : float = 10.
|
|
@export var spawn_rate : float = 30.
|
|
@export var horde_manager : AlienHordeManager
|
|
|
|
var current_frame : int = 0
|
|
|
|
var aliens : Array[Alien] = []
|
|
var clusters := []
|
|
var clusters_coords : Array[Vector2i] = []
|
|
|
|
var time_elapsed = 0.
|
|
var time_spawning = 0.
|
|
|
|
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
|
func _process(delta):
|
|
if delay > 0:
|
|
delay -= delta
|
|
else:
|
|
spawn_aliens(delta)
|
|
|
|
func spawn_aliens(delta):
|
|
if time_elapsed < duration:
|
|
time_elapsed += delta
|
|
time_spawning += delta
|
|
|
|
for i in range(roundi(spawn_rate * time_spawning)):
|
|
time_spawning -= 1/spawn_rate
|
|
spawn_alien()
|
|
|
|
func spawn_alien() -> Alien:
|
|
var alien_position : Vector3 = Vector3(
|
|
%SpawnPoint.global_position.x + randf_range(-SPAWN_RANDOM_POSITION_RANGE, SPAWN_RANDOM_POSITION_RANGE),
|
|
0,
|
|
%SpawnPoint.global_position.z + randf_range(-SPAWN_RANDOM_POSITION_RANGE, SPAWN_RANDOM_POSITION_RANGE)
|
|
)
|
|
|
|
var alien_rotation : float = rotation.y + randf_range(-SPAWN_RANDOM_ANGLE_RANGE, SPAWN_RANDOM_ANGLE_RANGE)
|
|
|
|
return horde_manager.spawn_alien(alien_position, alien_rotation)
|