using System; using RebootKit.Engine.Simulation.Sensors; using UnityEngine; namespace RebootReality.jelycho.Player { [Serializable] public struct SingleRaySensor : ISensor { [SerializeField] Transform m_Origin; [SerializeField] LayerMask m_LayerMask; [SerializeField] float m_MaxDistance; public GameObject Sense() { Ray ray = new Ray(m_Origin.position, m_Origin.forward); if (Physics.Raycast(ray, out RaycastHit hit, m_MaxDistance, m_LayerMask)) { return hit.collider.gameObject; } return null; } } [Serializable] public class SingleRaySensor : ISensor where T : class { [SerializeField] Transform m_Origin; [SerializeField] LayerMask m_LayerMask; [SerializeField] float m_MaxDistance; public T Sense() { Ray ray = new Ray(m_Origin.position, m_Origin.forward); if (Physics.Raycast(ray, out RaycastHit hit, m_MaxDistance, m_LayerMask)) { if (hit.collider.TryGetComponent(out T component)) { return component; } } return null; } } }