slowpoker/Assets/Scripts/Player/Interactions.cs
2024-10-19 02:54:12 +03:00

65 lines
1.8 KiB
C#

using Interactive;
using UnityEngine;
namespace Player
{
public class Interactions : MonoBehaviour
{
public float maxHitDistance = 5f;
public bool canInteract;
private Camera _cam;
private RaycastHit _hit;
private int _playerLayerMask, _defaultLayerMask;
private IInteractable _observableObject;
void Start()
{
_cam = Camera.main;
_playerLayerMask = LayerMask.GetMask("Player");
_defaultLayerMask = LayerMask.GetMask("Default");
}
void Update()
{
Ray ray = _cam.ViewportPointToRay(new Vector3(0.5f, 0.5f, 0));
Interact(ray);
}
void Interact(Ray ray)
{
if (Physics.Raycast(ray, out _hit, maxHitDistance, _defaultLayerMask))
{
IInteractable interactable = _hit.transform.gameObject.GetComponent<IInteractable>();
canInteract = interactable != null;
if (canInteract)
{
if (_observableObject != interactable)
{
_observableObject?.LookOut();
interactable.LookAt();
}
if(Input.GetKeyDown(KeyCode.E))
{
interactable.Interact();
}
}
else
{
if (_observableObject != interactable)
{
_observableObject?.LookOut();
}
}
_observableObject = interactable;
}
else
{
canInteract = false;
}
}
}
}