using KitsuneCafe.Sys; using UnityEngine; using UnityEngine.Events; namespace KitsuneCafe.Interaction { public class Interactable : MonoBehaviour, IInteractable { [SerializeField] private bool oneTimeUse = false; [SerializeField] private UnityEvent onSelected = default; [SerializeField] private UnityEvent onDeselected = default; [SerializeField] private UnityEvent onInteracted = default; public bool IsInteractable => enabled; void IInteractable.Select(IInteractor interactor) { if (enabled) { onSelected.Invoke(interactor); } } void IInteractable.Deselect(IInteractor interactor) { onDeselected.Invoke(interactor); } public IResult Interact(IInteractor interactor) { if (!enabled) { return Result.Err(InteractionError.Inactive()); } onInteracted.Invoke(interactor); if (oneTimeUse) { enabled = false; } return Result.Ok(default); } } }