## SnapPoint — attachment position on furniture where a Character can snap into a pose.
## Add to any furniture node. The node auto-registers in the "snap_points" group on _ready.
class_name SnapPoint extends Node2D

signal character_snapped(character: Character)
signal character_unsnapped(character: Character)

@export var pose: String = "sitting"
@export var baby_only: bool = false

var occupant: Character = null


func _ready() -> void:
	add_to_group("snap_points")


func is_free() -> bool:
	return occupant == null


func accepts(character: Character) -> bool:
	if not is_free():
		return false
	if not baby_only:
		return true
	if character.data == null:
		return false
	return character.data.state == CharacterData.State.BABY


func snap(character: Character) -> void:
	occupant = character
	character_snapped.emit(character)


func unsnap() -> void:
	if occupant == null:
		return
	var prev: Character = occupant
	occupant = null
	character_unsnapped.emit(prev)
