private int GetIndexOfHoveredDragHandle() { Vector2 devicePos; if (!InputDevice.Instance.GetPosition(out devicePos)) { return(-1); } List <BoxFace> allBoxFaces = BoxFaces.GetAll(); foreach (BoxFace face in allBoxFaces) { DragHandle dragHandle = _dragHandles[(int)face]; if (!_axesVisibilityMask[(int)dragHandle.Axis]) { continue; } if (dragHandle.ScreenRect.Contains(devicePos, true)) { return((int)face); } } return(-1); }
private void UpdateDragHandles() { if (_targetOOBB == null) { return; } float halfHandleScreenSize = _dragHandleSizeInPixels * 0.5f; Camera camera = EditorCamera.Instance.Camera; Plane cameraNearPlane = camera.GetNearPlane(); List <BoxFace> allBoxFaces = BoxFaces.GetAll(); foreach (BoxFace face in allBoxFaces) { Vector3 boxFaceCenter = _targetOOBB.GetBoxFaceCenter(face); Vector2 screenFaceCenter = camera.WorldToScreenPoint(boxFaceCenter); _dragHandles[(int)face].ScreenRect = new Rect(screenFaceCenter.x - halfHandleScreenSize, screenFaceCenter.y - halfHandleScreenSize, _dragHandleSizeInPixels, _dragHandleSizeInPixels); _dragHandles[(int)face].IsVisible = true; if (cameraNearPlane.GetDistanceToPoint(boxFaceCenter) < 0.0f) { _dragHandles[(int)face].IsVisible = false; } } }