extends Area2D class_name PlayerSpawnZone @onready var shape: CollisionShape2D = $CollisionShape2D @onready var markers: Node2D = $Markers const DEMON_SCENE: PackedScene = preload("res://assets/scenes/demon.tscn") func add_survivor() -> void: var demon_count = get_tree().get_nodes_in_group("survivor").size() if demon_count >= 9: return var spot = find_first_free_spot() if spot == null: return var demon = DEMON_SCENE.instantiate() demon.name = "Demon #%d" % (demon_count + 1) spot.add_child(demon) func find_first_free_spot() -> Node2D: for marker in markers.get_children(): if marker.get_child_count() == 0: return marker return null func is_occupied() -> bool: return find_first_free_spot() == null func drop(object: Node2D) -> void: object.reparent(find_first_free_spot()) func _on_mouse_entered() -> void: var da = GlobalInput.dragged_object if da == null: return var object_is_survivor = da.is_in_group("survivor") var spot_is_free = not is_occupied() var spot_is_not_source = not is_ancestor_of(da) if object_is_survivor && spot_is_free && spot_is_not_source: GlobalInput.set_drop_spot(self) func _on_mouse_exited() -> void: if GlobalInput.drop_spot == self: GlobalInput.set_drop_spot(null)