extends Node2D
class_name SacrificeStone

## The sacrificial stone where entities can be placed on.  
##
## Entities use [MovementHunter] to move towards the center of the stone.


## Emitted when the sacrifice on top of the stone changes.
signal sacrifice_changed(entity: PhysicsBody2D)

## The entity currently on top of the stone.
var entity: PhysicsBody2D


func _on_tracked(body: PhysicsBody2D):
	# If a entity is dragged on top of the SacrificeStone while another entity is already on top of it, ignore the capture and let the collision resolve instead
	if entity != null:
		return
	# Make sure the entity is sacrificable, and if it is, lock it in and emit [signal sacrifice_changed].
	var types: Array = body.find_children("*", "Sacrificable", false, false)
	for type in types:
		entity = body
		sacrifice_changed.emit(body)
		break

func _on_untracked(body: PhysicsBody2D):
	if body == entity:
		entity = null
		sacrifice_changed.emit(null)