slowpoker/Assets/Scripts/Player/Interactions.cs

65 lines
1.8 KiB
C#
Raw Normal View History

2024-10-17 23:09:51 +03:00
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;
2024-10-19 02:54:12 +03:00
private IInteractable _observableObject;
2024-10-17 23:09:51 +03:00
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;
2024-10-19 02:54:12 +03:00
if (canInteract)
2024-10-17 23:09:51 +03:00
{
2024-10-19 02:54:12 +03:00
if (_observableObject != interactable)
{
_observableObject?.LookOut();
interactable.LookAt();
}
if(Input.GetKeyDown(KeyCode.E))
{
interactable.Interact();
}
}
else
{
if (_observableObject != interactable)
{
_observableObject?.LookOut();
}
2024-10-17 23:09:51 +03:00
}
2024-10-19 02:54:12 +03:00
_observableObject = interactable;
2024-10-17 23:09:51 +03:00
}
else
{
canInteract = false;
}
}
}
}