using UnityEngine; using UnityEngine.Events; namespace HQFPSWeapons { /// /// Base class for interactive objects (eg. buttons, item pickups). /// Has numerous raycast and interaction callbacks (overridable). /// public class InteractiveObject : MonoBehaviour { public bool InteractionEnabled { get { return m_InteractionEnabled; } set { m_InteractionEnabled = value; } } public string InteractionText { get { return m_InteractionText; } } [BHeader("Interaction", true)] [SerializeField] private bool m_InteractionEnabled = true; [SerializeField] [Multiline] protected string m_InteractionText = string.Empty; [Space] [SerializeField] private SoundPlayer m_RaycastStartAudio = null; [SerializeField] private SoundPlayer m_RaycastEndAudio = null; [SerializeField] private SoundPlayer m_InteractionStartAudio = null; [SerializeField] private SoundPlayer m_InteractionEndAudio = null; public UnityEvent m_InteractEvent = null; /// /// Called when a player starts looking at the object. /// public virtual void OnRaycastStart(Player player) { m_RaycastStartAudio.Play2D(); } /// /// Called while a player is looking at the object. /// public virtual void OnRaycastUpdate(Player player) { } /// /// Called when a player stops looking at the object. /// public virtual void OnRaycastEnd(Player player) { m_RaycastEndAudio.Play2D(); } /// /// Called when a player starts interacting with the object. /// public virtual void OnInteractionStart(Player player) { m_InteractionStartAudio.Play2D(); m_InteractEvent.Invoke(); } /// /// Called while a player is interacting with the object. /// public virtual void OnInteractionUpdate(Player player) { } /// /// Called when a player stops interacting with the object. /// public virtual void OnInteractionEnd(Player player) { m_InteractionEndAudio.Play2D(); } } }