summaryrefslogtreecommitdiff
path: root/Assets/Samples/XR Interaction Toolkit/3.1.2/Hands Interaction Demo/Scripts/HideObjectWhenInteractorBlocked.cs
blob: 912894aaeac2d12f957c525c0ba6c94302ae7e6e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
using UnityEngine.XR.Interaction.Toolkit.Interactors;
using UnityEngine.XR.Interaction.Toolkit.Interactors.Visuals;

namespace UnityEngine.XR.Interaction.Toolkit.Samples.Hands
{
    /// <summary>
    /// Hides the specified GameObject when the associated interactor is blocked by an interaction within its group.
    /// </summary>
    public class HideObjectWhenInteractorBlocked : MonoBehaviour
    {
        [SerializeField]
        [Tooltip("The interactor that this component monitors for blockages.")]
        XRBaseInteractor m_Interactor;

        [SerializeField]
        [Tooltip("The GameObject to hide when the interactor is blocked.")]
        GameObject m_ObjectToHide;

        ICurveInteractionDataProvider m_CurveInteractionDataProvider;
        bool m_HasCurveDataProvider;

        /// <summary>
        /// See <see cref="MonoBehaviour"/>.
        /// </summary>
        void OnEnable()
        {
            if (m_Interactor == null || m_ObjectToHide == null)
                enabled = false;

            m_HasCurveDataProvider = false;
            if (m_Interactor is ICurveInteractionDataProvider provider)
            {
                m_CurveInteractionDataProvider = provider;
                m_HasCurveDataProvider = true;
            }
        }

        /// <summary>
        /// See <see cref="MonoBehaviour"/>.
        /// </summary>
        void Update()
        {
            if (m_HasCurveDataProvider)
                m_ObjectToHide.SetActive(m_CurveInteractionDataProvider.isActive);
            else
                m_ObjectToHide.SetActive(m_Interactor.isActiveAndEnabled && !m_Interactor.IsBlockedByInteractionWithinGroup());
        }
    }
}