42 lines
1.1 KiB
GDScript
42 lines
1.1 KiB
GDScript
extends Node
|
|
class_name SpawnManager2D
|
|
|
|
#var scene = preload("res://molecular/nucleotide_prey.tscn")
|
|
@export var scene: PackedScene
|
|
@export var minCount = 1
|
|
@export var maxCount = 2
|
|
@export var spawnRange: Rect2
|
|
var _currentCount = 0
|
|
|
|
|
|
# Called when the node enters the scene tree for the first time.
|
|
func _ready() -> void:
|
|
_spawn_minimum()
|
|
|
|
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
|
func _process(delta: float) -> void:
|
|
pass
|
|
|
|
func _spawn_minimum() -> void:
|
|
while _currentCount < minCount and _currentCount < maxCount:
|
|
_spawn_random()
|
|
|
|
func _random_pos() -> Vector2:
|
|
return Vector2(randf_range(spawnRange.position[0], spawnRange.size[0]), randf_range(spawnRange.position[1], spawnRange.size[1]))
|
|
|
|
func _spawn_random() -> void:
|
|
var pos = _random_pos()
|
|
_spawn_creature(pos)
|
|
_currentCount += 1
|
|
|
|
func _spawn_creature(position: Vector2) -> void:
|
|
var instance = scene.instantiate()
|
|
instance.position = position
|
|
add_child(instance)
|
|
if instance.has_signal("died"):
|
|
instance.died.connect(_on_entity_died)
|
|
|
|
func _on_entity_died() -> void:
|
|
_currentCount = max(0, _currentCount-1)
|
|
_spawn_minimum()
|