65 lines
1.8 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|
|
} |