tojam20-elevator/scenes/node_3d.gd

43 lines
1.1 KiB
GDScript

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)