extends Node3D @export var spawn_position := Vector3(0, 0, -20) @export var spawn_spread := 2.0 @export var spawn_interval := 1.5 var survivor_scene := preload("res://scenes/survivor.tscn") var survivors_to_spawn := 0 var spawn_timer: Timer func start_spawning(count: int): survivors_to_spawn = count if not spawn_timer: spawn_timer = Timer.new() spawn_timer.one_shot = false spawn_timer.wait_time = spawn_interval spawn_timer.timeout.connect(_spawn_one) add_child(spawn_timer) spawn_timer.start() _spawn_one() # first one immediately func stop_spawning(): if spawn_timer: spawn_timer.stop() survivors_to_spawn = 0 func _spawn_one(): if survivors_to_spawn <= 0: if spawn_timer: spawn_timer.stop() return var survivor = survivor_scene.instantiate() var offset_x = randf_range(-spawn_spread, spawn_spread) var xform = Transform3D() xform.origin = spawn_position + Vector3(offset_x, 0, 0) survivors_to_spawn -= 1 _deferred_add.call_deferred(survivor, xform) func _deferred_add(survivor, xform): get_tree().current_scene.add_child(survivor) survivor.owner = get_tree().current_scene survivor.start(xform)