canto/Assets/Scripts/Interaction/Interactable.cs
2025-08-14 19:11:32 -04:00

53 lines
1.3 KiB
C#

using KitsuneCafe.Sys;
using UnityEngine;
using UnityEngine.Events;
namespace KitsuneCafe.Interaction
{
public class Interactable : MonoBehaviour, IInteractable
{
[SerializeField]
private bool oneTimeUse = false;
[SerializeField]
private UnityEvent<IInteractor> onSelected = default;
[SerializeField]
private UnityEvent<IInteractor> onDeselected = default;
[SerializeField]
private UnityEvent<IInteractor> 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<Unit, InteractionError> Interact(IInteractor interactor)
{
onInteracted.Invoke(interactor);
if (oneTimeUse)
{
isInteractable = false;
}
return Result.Ok<Unit, InteractionError>(default);
}
public void SetInteractable(bool interactable = true)
{
isInteractable = interactable;
}
}
}