예제 #1
0
            internal void UpdateDirectSelection()
            {
                m_DirectSelections.Clear();
                m_ActiveStates.Clear();

                var directSelection = objectsGrabber;

                Rays.ForEachProxyDevice(deviceData =>
                {
                    var rayOrigin = deviceData.rayOrigin;
                    var input     = deviceData.directSelectInput;
                    var obj       = GetDirectSelectionForRayOrigin(rayOrigin);
                    if (obj && !obj.CompareTag(k_VRPlayerTag))
                    {
                        m_ActiveStates.Add(input);
                        m_DirectSelections[rayOrigin] = new DirectSelectionData
                        {
                            gameObject = obj,
                            node       = deviceData.node,
                            input      = input
                        };
                    }
                    else if (directSelection != null && directSelection.GetHeldObjects(rayOrigin) != null)
                    {
                        m_ActiveStates.Add(input);
                    }
                });

                foreach (var ray in evr.GetNestedModule <MiniWorlds>().rays)
                {
                    var rayOrigin    = ray.Key;
                    var miniWorldRay = ray.Value;
                    var input        = miniWorldRay.directSelectInput;
                    var go           = GetDirectSelectionForRayOrigin(rayOrigin);
                    if (go != null)
                    {
                        m_ActiveStates.Add(input);
                        m_DirectSelections[rayOrigin] = new DirectSelectionData
                        {
                            gameObject = go,
                            node       = ray.Value.node,
                            input      = input
                        };
                    }
                    else if (miniWorldRay.dragObjects != null ||
                             (directSelection != null && directSelection.GetHeldObjects(rayOrigin) != null))
                    {
                        m_ActiveStates.Add(input);
                    }
                }

                // Only activate direct selection input if the cone is inside of an object, so a trigger press can be detected,
                // and keep it active if we are dragging
                Rays.ForEachProxyDevice(deviceData =>
                {
                    var input    = deviceData.directSelectInput;
                    input.active = m_ActiveStates.Contains(input);
                });
            }
예제 #2
0
        internal void UpdateDirectSelection()
        {
            m_DirectSelections.Clear();

            if (m_ToolModule != null)
            {
                foreach (var deviceData in m_ToolModule.deviceData)
                {
                    var proxy = deviceData.proxy;
                    if (!proxy.active)
                    {
                        continue;
                    }

                    var     rayOrigin = deviceData.rayOrigin;
                    Vector3 contactPoint;
                    var     obj = GetDirectSelectionForRayOrigin(rayOrigin, out contactPoint);
                    if (obj && !obj.CompareTag(EditorXR.VRPlayerTag))
                    {
                        m_DirectSelections[rayOrigin] = new DirectSelectionData
                        {
                            gameObject   = obj,
                            contactPoint = contactPoint
                        };
                    }
                }
            }

            if (m_MiniWorldModule != null)
            {
                foreach (var ray in m_MiniWorldModule.rays)
                {
                    var     rayOrigin = ray.Key;
                    Vector3 contactPoint;
                    var     go = GetDirectSelectionForRayOrigin(rayOrigin, out contactPoint);
                    if (go != null)
                    {
                        m_DirectSelections[rayOrigin] = new DirectSelectionData
                        {
                            gameObject   = go,
                            contactPoint = contactPoint
                        };
                    }
                }
            }
        }
예제 #3
0
            internal void UpdateDirectSelection()
            {
                m_DirectSelections.Clear();

                Rays.ForEachProxyDevice(deviceData =>
                {
                    var rayOrigin = deviceData.rayOrigin;
                    var input     = deviceData.directSelectInput;
                    var obj       = GetDirectSelectionForRayOrigin(rayOrigin);
                    if (obj && !obj.CompareTag(k_VRPlayerTag))
                    {
                        m_DirectSelections[rayOrigin] = new DirectSelectionData
                        {
                            gameObject = obj,
                            node       = deviceData.node,
                            input      = input
                        };
                    }
                });

                foreach (var ray in evr.GetNestedModule <MiniWorlds>().rays)
                {
                    var rayOrigin    = ray.Key;
                    var miniWorldRay = ray.Value;
                    var input        = miniWorldRay.directSelectInput;
                    var go           = GetDirectSelectionForRayOrigin(rayOrigin);
                    if (go != null)
                    {
                        m_DirectSelections[rayOrigin] = new DirectSelectionData
                        {
                            gameObject = go,
                            node       = ray.Value.node,
                            input      = input
                        };
                    }
                }
            }