Example #1
0
 public static void AddRaycaster(Pointer3DRaycaster raycaster)
 {
     if (raycasters.AddUnique(raycaster))
     {
         Initialize();
     }
 }
Example #2
0
        protected void CleanUpRaycaster(Pointer3DRaycaster raycaster)
        {
            raycaster.CleanUpRaycast();

            var hoverEventData = raycaster.HoverEventData;

            // hover event
            hoverEventData.pointerCurrentRaycast = default(RaycastResult);

            if (hoverEventData.pointerEnter != null)
            {
                HandlePointerExitAndEnter(hoverEventData, null);
            }

            // buttons event
            for (int i = 0, imax = raycaster.ButtonEventDataList.Count; i < imax; ++i)
            {
                var buttonEventData = raycaster.ButtonEventDataList[i];
                if (buttonEventData == null)
                {
                    continue;
                }

                buttonEventData.Reset();
                buttonEventData.pointerCurrentRaycast = default(RaycastResult);

                ProcessPressUp(buttonEventData);

                if (buttonEventData.pointerEnter != null)
                {
                    HandlePointerExitAndEnter(buttonEventData, null);
                }
            }
        }
 public static void RemoveRaycasters(Pointer3DRaycaster raycaster)
 {
     if (raycasters.Remove(raycaster) && Active)
     {
         instance.DisableRaycaster(raycaster);
     }
 }
Example #4
0
 protected virtual void OnDestroy()
 {
     if (m_raycaster != null)
     {
         raycaster.RemoveRaycastMethod(this);
     }
     m_raycaster = null;
 }
Example #5
0
 protected virtual void Start()
 {
     m_raycaster = GetComponent <Pointer3DRaycaster>();
     if (m_raycaster != null)
     {
         m_raycaster.AddRaycastMethod(this);
     }
 }
Example #6
0
 protected virtual void OnDestroy()
 {
     if (m_raycaster != null)
     {
         raycaster.RemoveGenerator(this);
     }
     m_raycaster = null;
 }
        public static void AddRaycaster(Pointer3DRaycaster raycaster)
        {
            if (raycaster == null)
            {
                return;
            }

            Initialize();
            raycasters.AddUnique(raycaster);
        }
Example #8
0
        protected void CleanUpRaycaster(Pointer3DRaycaster raycaster)
        {
            if (raycaster == null)
            {
                return;
            }

            var hoverEventData = raycaster.HoverEventData;

            if (hoverEventData == null || raycaster.ButtonEventDataList.Count == 0)
            {
                return;
            }

            hoverEventData.Reset();

            // buttons event
            for (int i = 0, imax = raycaster.ButtonEventDataList.Count; i < imax; ++i)
            {
                var buttonEventData = raycaster.ButtonEventDataList[i];
                if (buttonEventData == null || buttonEventData == hoverEventData)
                {
                    continue;
                }

                buttonEventData.Reset();

                if (buttonEventData.eligibleForClick)
                {
                    ProcessPressUp(buttonEventData);
                    HandlePressExitAndEnter(buttonEventData, null);
                }

                if (buttonEventData.pointerEnter != null)
                {
                    if (i == 0)
                    {
                        // perform exit event for hover event data
                        HandlePointerExitAndEnter(buttonEventData, null);
                    }
                    else
                    {
                        buttonEventData.pointerEnter = null;
                    }
                }
            }

            raycaster.CleanUpRaycast();

            for (int i = 0, imax = raycaster.ButtonEventDataList.Count; i < imax; ++i)
            {
                raycaster.ButtonEventDataList[i].pointerPressRaycast   = default(RaycastResult);
                raycaster.ButtonEventDataList[i].pointerCurrentRaycast = default(RaycastResult);
            }
        }
        public static void RemoveRaycaster(Pointer3DRaycaster raycaster)
        {
            if (!raycasters.Remove(raycaster))
            {
                return;
            }

            if (!processingRaycasters.Contains(raycaster) && Active)
            {
                Instance.CleanUpRaycaster(raycaster);
            }
        }
Example #10
0
        public static bool TryGetRaycaster3D(this PointerEventData eventData, out Pointer3DRaycaster raycaster)
        {
            raycaster = null;

            if (!(eventData is Pointer3DEventData))
            {
                return(false);
            }

            var eventData3D = eventData as Pointer3DEventData;

            raycaster = eventData3D.raycaster;
            return(true);
        }
        protected void DisableRaycaster(Pointer3DRaycaster raycaster)
        {
            if (ReferenceEquals(raycaster, null))
            {
                return;
            }

            // hover event
            var hoverEventData = raycaster.HoverEventData;

            hoverEventData.pointerCurrentRaycast = default(RaycastResult);

            if (hoverEventData.pointerEnter != null)
            {
                HandlePointerExitAndEnter(hoverEventData, null);
            }

            // buttons event
            for (int i = 0, imax = raycaster.ButtonEventDataList.Count; i < imax; ++i)
            {
                var buttonEventData = raycaster.ButtonEventDataList[i];
                if (buttonEventData == null)
                {
                    continue;
                }

                buttonEventData.Reset();
                buttonEventData.pointerCurrentRaycast = default(RaycastResult);

                ProcessPressUp(buttonEventData);

                if (buttonEventData.pointerEnter != null)
                {
                    HandlePointerExitAndEnter(buttonEventData, null);
                }
            }
        }
        public static void Raycast(Canvas canvas, bool ignoreReversedGraphics, Ray ray, float distance, Pointer3DRaycaster raycaster, List <RaycastResult> raycastResults)
        {
            if (canvas == null)
            {
                return;
            }

            var eventCamera       = raycaster.eventCamera;
            var screenCenterPoint = Pointer3DInputModule.ScreenCenterPoint;
            var graphics          = GraphicRegistry.GetGraphicsForCanvas(canvas);

            // Pointer3DRaycaster should set tje eventCamera to correct position

            for (int i = 0; i < graphics.Count; ++i)
            {
                var graphic = graphics[i];

                // -1 means it hasn't been processed by the canvas, which means it isn't actually drawn
                if (graphic.depth == -1 || !graphic.raycastTarget)
                {
                    continue;
                }

                if (!RectTransformUtility.RectangleContainsScreenPoint(graphic.rectTransform, screenCenterPoint, eventCamera))
                {
                    continue;
                }

                if (ignoreReversedGraphics && Vector3.Dot(ray.direction, graphic.transform.forward) <= 0f)
                {
                    continue;
                }

                if (!graphic.Raycast(screenCenterPoint, eventCamera))
                {
                    continue;
                }

                //var dist = Vector3.Dot(transForward, trans.position - ray.origin) / Vector3.Dot(transForward, ray.direction);
                float dist;
                new Plane(graphic.transform.forward, graphic.transform.position).Raycast(ray, out dist);
                if (dist > distance)
                {
                    continue;
                }

                raycastResults.Add(new RaycastResult
                {
                    gameObject     = graphic.gameObject,
                    module         = raycaster,
                    distance       = dist,
                    worldPosition  = ray.GetPoint(dist),
                    worldNormal    = -graphic.transform.forward,
                    screenPosition = screenCenterPoint,
                    index          = raycastResults.Count,
                    depth          = graphic.depth,
                    sortingLayer   = canvas.sortingLayerID,
                    sortingOrder   = canvas.sortingOrder
                });
            }
        }
 public static void RemoveRaycasters(Pointer3DRaycaster raycaster)
 {
     RemoveRaycaster(raycaster);
 }
Example #14
0
 public Pointer3DEventData(Pointer3DRaycaster ownerRaycaster, EventSystem eventSystem) : base(eventSystem)
 {
     raycaster = ownerRaycaster;
     Pointer3DInputModule.AssignPointerId(this);
 }
 public StandaloneEventData(Pointer3DRaycaster ownerRaycaster, EventSystem eventSystem, StandaloneButton sbtn, InputButton ibtn) : base(ownerRaycaster, eventSystem)
 {
     standaloneButton = sbtn;
     button           = ibtn;
 }