using UnityEngine; namespace DDD { public class RestaurantInteractionComponent : MonoBehaviour, IInteractable { [SerializeField] private InteractionType _interactionType = InteractionType.None; [SerializeField] private float _holdTime = 1f; [SerializeField] private string _interactionMessageKey = ""; [SerializeField] protected GameFlowState _interactionAvailableFlows; [SerializeField] private Transform[] _aiInteractionPoints; public bool CanInteract() { return !IsInteractionHidden(); } public bool IsInteractionHidden() { var currentGameFlowState = GameFlowManager.Instance.GameFlowDataSo.CurrentGameState; var flowDisabled = (currentGameFlowState & _interactionAvailableFlows) == 0; return flowDisabled; } public bool OnInteracted(IInteractor interactor, ScriptableObject payloadSo = null) { if (CanInteract() == false) { return false; } bool interactionResult = RestaurantInteractionEvents.RestaurantInteraction.RequestInteraction(interactor.GetInteractorGameObject(), GetInteractableGameObject(), GetInteractionType(), payloadSo, true); return interactionResult; } public InteractionType GetInteractionType() { return _interactionType; } public GameObject GetInteractableGameObject() { return gameObject; } public void InitializeInteraction(InteractionType interactionType) { _interactionType = interactionType; } public float GetRequiredHoldTime() { return _holdTime; } public string GetInteractionMessageKey() { return _interactionMessageKey; } public Vector3[] GetInteractionPoints() { if (_aiInteractionPoints == null || _aiInteractionPoints.Length == 0) { // AI 상호작용 포인트가 설정되지 않은 경우 오브젝트의 위치를 기본값으로 반환 return new Vector3[] { transform.position }; } Vector3[] positions = new Vector3[_aiInteractionPoints.Length]; for (int i = 0; i < _aiInteractionPoints.Length; i++) { if (_aiInteractionPoints[i] != null) { positions[i] = _aiInteractionPoints[i].position; } else { positions[i] = transform.position; } } return positions; } } }