示例#1
0
        /// <summary>
        /// Update the cursor's position and visual state
        /// </summary>
        /// <param name="eventData"></param>
        /// <param name="pressState"></param>
        public void UpdateCursor(MetaHandEventData eventData, PressState pressState)
        {
            float ringScale = _ringPanelProximityScale.Evaluate(eventData.DownDistance);

            _ring.transform.position      = eventData.ProjectedPanelPosition;
            _ring.transform.localPosition = new Vector3(_ring.transform.localPosition.x, _ring.transform.localPosition.y, 0);
            _ring.transform.localScale    = Vector3.one * ringScale;
            _ring.Alpha = _ringPanelProximityAlpha.Evaluate(eventData.DownDistance);

            _ring2.transform.position      = eventData.ProjectedPanelPosition;
            _ring2.transform.localPosition = new Vector3(_ring2.transform.localPosition.x, _ring2.transform.localPosition.y, 0);
            _ring2.transform.localScale    = Vector3.one * (ringScale + _ring2.Thickness);
            _ring2.Alpha = _ring.Alpha;

            _fill.transform.position      = eventData.ProjectedPanelPosition;
            _fill.transform.localPosition = new Vector3(_fill.transform.localPosition.x, _fill.transform.localPosition.y, 0);
            _fill.Alpha = eventData.DownDistance < 0 ? _ring.Alpha * FillAlpha : FillAlpha;
            _fillOutline.transform.position = eventData.ProjectedPanelPosition;
            _fillOutline.Alpha = eventData.DownDistance < 0 ? _ring.Alpha * FillOutlineAlpha : FillOutlineAlpha;

            _hoverPower                  = Mathf.SmoothDamp(_hoverPower, (_isHovering ? 1 : 0), ref _hoverPowerVelocity, HoverEffectSeconds);
            _dot.transform.position      = eventData.ProjectedPanelPosition;
            _dot.transform.localPosition = new Vector3(_dot.transform.localPosition.x, _dot.transform.localPosition.y, 0);
            _dot.transform.localScale    = Vector3.one * (_fullDotScale * Mathf.Lerp(DotUnhoveredScale, 1, _hoverPower));
            float dotAlpha = Mathf.Lerp(DotUnhoveredAlpha, 1, _hoverPower);

            _dot.Alpha = eventData.DownDistance < 0 ? _ring.Alpha * dotAlpha : dotAlpha;

            if (_isHovering && pressState == PressState.Pressed)
            {
                _canvasPressIndicator.PlayAnimation(eventData.ProjectedPanelPosition);
            }
        }
示例#2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="eventData"></param>
        public void ProcessDrag(MetaHandEventData eventData)
        {
            bool moving = eventData.IsPointerMoving();

            if (moving && eventData.pointerDrag != null &&
                !eventData.dragging &&
                ShouldStartDrag(eventData.pressPosition, eventData.position, EventSystem.pixelDragThreshold, eventData.useDragThreshold))
            {
                ExecuteEvents.Execute(eventData.pointerDrag, eventData, ExecuteEvents.beginDragHandler);
                eventData.dragging = true;
            }

            // Drag notification
            if (eventData.dragging && moving && eventData.pointerDrag != null)
            {
                // Before doing drag we should cancel any pointer down state
                // And clear selection!
                if (eventData.pointerPress != eventData.pointerDrag)
                {
                    ExecuteEvents.Execute(eventData.pointerPress, eventData, ExecuteEvents.pointerUpHandler);

                    eventData.eligibleForClick = false;
                    eventData.pointerPress     = null;
                    eventData.rawPointerPress  = null;
                }
                ExecuteEvents.Execute(eventData.pointerDrag, eventData, ExecuteEvents.dragHandler);
            }
        }
示例#3
0
 /// <summary>
 /// Handle when the hand continues hovering over a UI element
 /// </summary>
 /// <param name="pointerEventData"></param>
 public void HoverStay(PointerEventData pointerEventData)
 {
     if (pointerEventData is MetaHandEventData)
     {
         MetaHandEventData metaHandEventData = (MetaHandEventData)pointerEventData;
         _crosshair.transform.position      = metaHandEventData.ProjectedPanelPosition;
         _crosshair.transform.localPosition = new Vector3(_crosshair.transform.localPosition.x, _crosshair.transform.localPosition.y, 0);
     }
 }
示例#4
0
 /// <summary>
 /// Handle when the hand hovers over a UI element
 /// </summary>
 /// <param name="pointerEventData"></param>
 public void HoverBegin(PointerEventData pointerEventData)
 {
     if (pointerEventData is MetaHandEventData)
     {
         _isHovering = true;
         _crosshair.gameObject.SetActive(true);
         MetaHandEventData metaHandEventData = (MetaHandEventData)pointerEventData;
         _crosshair.transform.position      = metaHandEventData.ProjectedPanelPosition;
         _crosshair.transform.localPosition = new Vector3(_crosshair.transform.localPosition.x, _crosshair.transform.localPosition.y, 0);
     }
 }
示例#5
0
        /// <summary>
        /// Get the correct camera for a pointer
        /// </summary>
        /// <param name="pointerEventData"></param>
        /// <returns></returns>
        public static Camera GetMetaHandEventDataPressEventCamera(PointerEventData pointerEventData)
        {
            MetaHandEventData data = pointerEventData as MetaHandEventData;

            if (pointerEventData != null)
            {
                return(data == null ? pointerEventData.pressEventCamera : data.pressEventCamera);
            }
            else
            {
                return(null);
            }
        }
示例#6
0
        private void Start()
        {
            //Get the collider defining the bounds
            _collider = GetComponent <BoxCollider>();

            if (!_collider.isTrigger)
            {
                Debug.LogWarning(name + " EventVolume collider must be trigger.");
            }

            _raycaster = GetComponentInParent <MetaHandGraphicsRaycaster>();
            _raycaster.Register(this);

            _pointerData           = new MetaHandEventData(_raycaster.EventSystem);
            _pointerData.pointerId = _nextId++;
        }
示例#7
0
        /// <summary>
        /// Get the correct camera for a pointer
        /// </summary>
        /// <param name="pointerEventData"></param>
        /// <returns></returns>
        public static Camera GetMetaHandEventDataPressEventCamera(PointerEventData pointerEventData)
        {
            MetaHandEventData data = pointerEventData as MetaHandEventData;

            return(data == null ? pointerEventData.pressEventCamera : data.pressEventCamera);;
        }