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; private bool isInteractable = true; public bool IsInteractable => isInteractable; void IInteractable.Select(IInteractor interactor) { onSelected.Invoke(interactor); } void IInteractable.Deselect(IInteractor interactor) { onDeselected.Invoke(interactor); } public IResult Interact(IInteractor interactor) { onInteracted.Invoke(interactor); if (oneTimeUse) { isInteractable = false; } return Result.Ok(default); } public void SetInteractable(bool interactable = true) { isInteractable = interactable; } } }