@icon("res://behaviours/spawner.svg") extends Node2D class_name Spawner ## Emitted when a new scene is spawned. signal spawned(entity: Node2D) ## Emitted when the [field blocking_tracker] prevents something from spawning. signal spawn_blocked ## The scene to spawn. @export var scene: PackedScene ## Where the scene should be parented to in the tree. @export var target: Node2D ## If set, requires the tracker to not be tracking anything before spawning a scene. @export var blocking_tracker: Tracker ## Spawn [field scene] at [field target] and the position of this node. func spawn(): if blocking_tracker != null: if not blocking_tracker.tracking.is_empty(): spawn_blocked.emit() return # Perhaps enqueue the spawn? if not target: target = MainGame.get_via_group(self).default_spawn_parent if not target: target = self var entity = scene.instantiate() entity.global_scale = global_scale entity.global_position = global_position entity.global_rotation = global_rotation target.add_child.call_deferred(entity) # Not sure why this is needed.