Rework elevator gameplay around pulse-blocking and per-floor spawning
This commit is contained in:
parent
a95eaa4dfb
commit
150e703d29
12 changed files with 423 additions and 151 deletions
43
scenes/node_3d.gd
Normal file
43
scenes/node_3d.gd
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
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)
|
||||
Loading…
Add table
Add a link
Reference in a new issue