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