using System.Collections.Generic; using System.Linq; using UnityEngine; public class BaseInteractableObject : MonoBehaviour { [SerializeField] public Transform _interactionPoint; [SerializeField] public List _menuActions; protected Player _player; private InteractionStatus _currentStatus = InteractionStatus.None; public InteractionStatus Interact(Player player) { _player = player; if (_currentStatus == InteractionStatus.None && _menuActions.Any()) { UIManager.Instance.ShowItemsMenu(_menuActions, PopupMenuCallback); _currentStatus = InteractionStatus.WaitForChoose; } else if (_currentStatus == InteractionStatus.Complete) { _currentStatus = InteractionStatus.None; return InteractionStatus.Complete; } else if (_currentStatus != InteractionStatus.WaitForChoose && _currentStatus != InteractionStatus.Complete) { if (_player.IsPathComplete(_interactionPoint.position)) { InteractAction(); _currentStatus = InteractionStatus.Complete; } else { _currentStatus = InteractionStatus.FarFromPlayer; } } return _currentStatus; } private void PopupMenuCallback(RadialMenuActionSO action) { if (action.Action == RadialMenuActions.Cancel) { _currentStatus = InteractionStatus.Complete; } else { _currentStatus = InteractionStatus.InProgress; } } protected virtual void InteractAction() { } }