ProjectDDD/Assets/_DDD/_Scripts/RestaurantEvent/RestaurantInteractionComponent.cs

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;
}
}
}