Example #1
0
        void GetRayIntersection(IRaycastSource source)
        {
            // Move camera to position and rotation for the ray origin
            var eventCameraTransform = m_EventCamera.transform;

            eventCameraTransform.position = source.rayOrigin.position;
            eventCameraTransform.rotation = source.rayOrigin.rotation;

            var eventData = source.eventData;

            eventData.Reset();
            eventData.delta       = Vector2.zero;
            eventData.position    = m_EventCamera.pixelRect.center;
            eventData.scrollDelta = Vector2.zero;

            eventSystem.RaycastAll(eventData, m_RaycastResultCache);
            var result = FindFirstRaycast(m_RaycastResultCache);

            // TODO: Investigate zero'ed world positions
            if (result.worldPosition == Vector3.zero)
            {
                foreach (var otherResult in m_RaycastResultCache)
                {
                    if (otherResult.worldPosition != Vector3.zero)
                    {
                        result.worldPosition = otherResult.worldPosition;
                        break;
                    }
                }
            }

            eventData.pointerCurrentRaycast = result;

            m_RaycastResultCache.Clear();
        }
Example #2
0
        void OnSelectReleased(IRaycastSource source)
        {
            var eventData     = source.eventData;
            var currentOverGo = eventData.pointerCurrentRaycast.gameObject;

            OnPointerUp(eventData, currentOverGo);
        }
Example #3
0
        void OnSelectPressed(IRaycastSource source)
        {
            var eventData     = source.eventData;
            var currentOverGo = eventData.pointerCurrentRaycast.gameObject;

            BeginPointerDown(eventData, currentOverGo);
            EndPointerDown(eventData, currentOverGo);
        }
Example #4
0
        internal bool IsValidHover(IRaycastSource source)
        {
            var eventData      = source.eventData;
            var currentRaycast = eventData.pointerCurrentRaycast;
            var go             = eventData.pointerDrag;

            if (!go)
            {
                go = currentRaycast.gameObject;
            }

            if (!go)
            {
                return(true);
            }

            if (go == gameObject)
            {
                return(true);
            }

            var        rayOrigin  = eventData.rayOrigin;
            DeviceData deviceData = null;

            foreach (var currentDevice in m_ToolModule.deviceData)
            {
                if (currentDevice.rayOrigin == rayOrigin)
                {
                    deviceData = currentDevice;
                    break;
                }
            }

            if (deviceData != null)
            {
                if (go.transform.IsChildOf(deviceData.rayOrigin)) // Don't let UI on this hand block the menu
                {
                    return(false);
                }

                var   scaledPointerDistance = currentRaycast.distance / this.GetViewerScale();
                var   menuHideFlags         = deviceData.menuHideData;
                var   mainMenu = deviceData.mainMenu;
                IMenu openMenu = mainMenu;
                if (deviceData.customMenu != null && menuHideFlags[mainMenu].hideFlags != 0)
                {
                    openMenu = deviceData.customMenu;
                }

                if (openMenu == null)
                {
                    return(false);
                }

                if (scaledPointerDistance < openMenu.localBounds.size.y + k_MenuHideMargin)
                {
                    // Only set if hidden--value is reset every frame
                    menuHideFlags[openMenu].hideFlags |= MenuHideFlags.OverUI;
                    return(true);
                }

                return(menuHideFlags[openMenu].hideFlags != 0);
            }

            return(true);
        }