using UnityEngine;
public class Clicker : MonoBehaviour
{
public Transform raySource;
private PlatformsManager _platformsManager;
private TryGetTouchPosition _getTouch;
private AudioSource _clickSource;
private int _collectablesLayer;
private void Awake()
{
_clickSource = GetComponent<AudioSource>();
_getTouch = FindObjectOfType<TryGetTouchPosition>();
_platformsManager = FindObjectOfType<PlatformsManager>();
_collectablesLayer = LayerMask.GetMask("Collectables");
}
public bool Click(int layer, out RaycastHit hit, string caller)
{
hit = new RaycastHit();
Ray? ray = null;
if (_getTouch.TryOnce(out var touchPosition)) ray = _platformsManager.cam.ScreenPointToRay(touchPosition);
else if (OVRInput.GetDown(OVRInput.Button.SecondaryIndexTrigger)) ray = new Ray(raySource.position, raySource.forward);
if (!ray.HasValue) return false;
if (Physics.Raycast(ray.Value, out hit, Mathf.Infinity, ~_collectablesLayer))
{
if (hit.collider.gameObject.layer == layer)
{
_clickSource.Play();
return true;
}
}
return false;
}
public bool Hover(int layer, out RaycastHit hit, string caller)
{
Ray? ray = _platformsManager.isVR ? new Ray(raySource.position, raySource.forward) : _platformsManager.cam.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray.Value, out hit, Mathf.Infinity, ~_collectablesLayer)) if (hit.collider.gameObject.layer == layer) return true;
return false;
}
}