using UnityEngine.XR.Interaction.Toolkit; namespace UnityEngine.XR.Content.Interaction.Analytics { /// /// Class that connects the Grab Interactable station scene objects with their respective analytics events. /// [AddComponentMenu("")] [DisallowMultipleComponent] class XrcGrabInteractableStationAnalytics : MonoBehaviour { const float k_FrequencyToSendWateringPlant = 4f; static readonly WateringPlant k_WateringPlantParameter = new WateringPlant(); static readonly BreakPiggyBank k_BreakPiggyBankParameter = new BreakPiggyBank(); [Header("Simple Object Substation")] [SerializeField] XRBaseInteractable[] m_InstantInteractables; [SerializeField] XRBaseInteractable[] m_KinematicInteractables; [SerializeField] XRBaseInteractable[] m_VelocityInteractables; [Header("Watering Can Substation")] [SerializeField] XRBaseInteractable m_WateringCanInteractable; [SerializeField] OnTrigger m_OnPlantGrowsTrigger; [Header("Piggy Bank Substation")] [SerializeField] XRBaseInteractable m_MalletInteractable; [SerializeField] GameObject m_PigBank; [Header("Ribbon Stick Substation")] [SerializeField] XRBaseInteractable m_RibbonStickInteractable; float m_TimeToSendWateringPlant; void Awake() { XrcAnalyticsUtils.Register(m_InstantInteractables, new GrabSimpleObjectInstant()); XrcAnalyticsUtils.Register(m_KinematicInteractables, new GrabSimpleObjectKinematic()); XrcAnalyticsUtils.Register(m_VelocityInteractables, new GrabSimpleObjectVelocity()); XrcAnalyticsUtils.Register(m_WateringCanInteractable, new GrabWateringCan()); if (m_OnPlantGrowsTrigger != null) m_OnPlantGrowsTrigger.onEnter.AddListener(OnWateringPlant); XrcAnalyticsUtils.Register(m_MalletInteractable, new GrabMallet()); OnRestorePiggyBank(m_PigBank); XrcAnalyticsUtils.Register(m_RibbonStickInteractable, new GrabRibbonStick()); } void OnWateringPlant(GameObject otherGameObject) { if (Time.unscaledTime < m_TimeToSendWateringPlant) return; m_TimeToSendWateringPlant = Time.unscaledTime + k_FrequencyToSendWateringPlant; XrcAnalytics.interactionEvent.Send(k_WateringPlantParameter); } void OnRestorePiggyBank(GameObject piggyBank) { if (piggyBank == null) return; var breakable = piggyBank.GetComponent(); if (breakable != null) breakable.onBreak.AddListener(OnBreakPiggyBank); } void OnBreakPiggyBank(GameObject otherGameObject, GameObject brokenGameObject) { XrcAnalytics.interactionEvent.Send(k_BreakPiggyBankParameter); if (brokenGameObject == null) return; var unbreakable = brokenGameObject.GetComponent(); if (unbreakable != null) unbreakable.onRestore.AddListener(OnRestorePiggyBank); } } }