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); }); }
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 }; } } } }
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 }; } } }