85 lines
2.7 KiB
C#
85 lines
2.7 KiB
C#
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;
|
|
}
|
|
}
|
|
} |