コード例 #1
0
        protected override void OnSessionBegin()
        {
            Camera focusCamera = RTFocusCamera.Get.TargetCamera;

            _adjustRotationForAbsSnap = false;

            GizmoHoverInfo gizmoHoverInfo = RTGizmosEngine.Get.HoveredGizmo.HoverInfo;

            if (gizmoHoverInfo.HandleDimension == GizmoDimension.Dim3D)
            {
                float t;
                Ray   ray = RTInputDevice.Get.Device.GetRay(focusCamera);
                if (_rotationPlane.Raycast(ray, out t))
                {
                    Vector3 intersectPoint  = ray.GetPoint(t);
                    Vector3 toHoverPoint    = (intersectPoint - _workData.RotationPlanePos);
                    Vector3 circleTangent3D = Vector3.Cross(_workData.Axis, toHoverPoint);

                    Vector2 screenTangentBegin = focusCamera.WorldToScreenPoint(intersectPoint);
                    Vector2 screenTangentEnd   = focusCamera.WorldToScreenPoint(intersectPoint + circleTangent3D);
                    _screenDragCircleTangent = (screenTangentEnd - screenTangentBegin).normalized;
                }
            }
            else
            {
                Vector2 inputDevicePos  = RTInputDevice.Get.Device.GetPositionYAxisUp();
                Vector2 screenPtOnPlane = focusCamera.WorldToScreenPoint(_workData.RotationPlanePos);
                _screenDragCircleTangent = (inputDevicePos - screenPtOnPlane).GetNormal();
            }
        }
コード例 #2
0
        public void UpdateHandleHoverInfo_SystemCall(GizmoHoverInfo hoverInfo)
        {
            if (!IsEnabled || IsDragged)
            {
                return;
            }

            bool wasHovered          = _hoverInfo.IsHovered;
            int  prevHoveredHandleId = _hoverInfo.HandleId;

            _hoverInfo.Reset();
            _hoveredHandle = null;

            if (hoverInfo.IsHovered && hoverInfo.HandleId != GizmoHandleId.None)
            {
                _hoverInfo.IsHovered       = true;
                _hoverInfo.HandleId        = hoverInfo.HandleId;
                _hoverInfo.HoverPoint      = hoverInfo.HoverPoint;
                _hoveredHandle             = _handles.GetHandleById(hoverInfo.HandleId);
                _hoverInfo.HandleDimension = hoverInfo.HandleDimension;
            }

            if (wasHovered && !_hoverInfo.IsHovered)
            {
                if (PreHoverExit != null)
                {
                    PreHoverExit(this, prevHoveredHandleId);
                }
                foreach (var behaviour in _behaviours)
                {
                    if (behaviour.IsEnabled)
                    {
                        behaviour.OnGizmoHoverExit(prevHoveredHandleId);
                    }
                }
                if (PostHoverExit != null)
                {
                    PostHoverExit(this, prevHoveredHandleId);
                }
            }
            else if (!wasHovered && _hoverInfo.IsHovered)
            {
                if (PreHoverEnter != null)
                {
                    PreHoverEnter(this, _hoverInfo.HandleId);
                }
                foreach (var behaviour in _behaviours)
                {
                    if (behaviour.IsEnabled)
                    {
                        behaviour.OnGizmoHoverEnter(_hoverInfo.HandleId);
                    }
                }
                if (PostHoverEnter != null)
                {
                    PostHoverEnter(this, _hoverInfo.HandleId);
                }
            }
            else
            if (wasHovered && _hoverInfo.IsHovered)
            {
                if (prevHoveredHandleId != _hoverInfo.HandleId)
                {
                    if (PreHoverExit != null)
                    {
                        PreHoverExit(this, prevHoveredHandleId);
                    }
                    foreach (var behaviour in _behaviours)
                    {
                        if (behaviour.IsEnabled)
                        {
                            behaviour.OnGizmoHoverExit(prevHoveredHandleId);
                        }
                    }
                    if (PostHoverExit != null)
                    {
                        PostHoverExit(this, prevHoveredHandleId);
                    }
                }

                if (PreHoverEnter != null)
                {
                    PreHoverEnter(this, _hoverInfo.HandleId);
                }
                foreach (var behaviour in _behaviours)
                {
                    if (behaviour.IsEnabled)
                    {
                        behaviour.OnGizmoHoverEnter(_hoverInfo.HandleId);
                    }
                }
                if (PostHoverEnter != null)
                {
                    PostHoverEnter(this, _hoverInfo.HandleId);
                }
            }
        }