Vector3 GetMouse3DPosition()
{
IntVector2 pos = ui.cursorPosition;
Ray cameraRay = camera.GetScreenRay(float(pos.x) / graphics.width, float(pos.y) / graphics.height);
Vector3 res = cameraNode.position + cameraRay.direction * Vector3(0, 0, newNodeDistance);
if (ui.HasModalElement())
return res;
if (IsGizmoSelected())
return res;
if (editorScene.physicsWorld != null)
{
if (!runUpdate)
editorScene.physicsWorld.UpdateCollisions();
PhysicsRaycastResult result = editorScene.physicsWorld.RaycastSingle(cameraRay, camera.farClip);
if (result.body !is null)
res = result.position;
}
else
{
if (editorScene.octree is null)
return res;
RayQueryResult result = editorScene.octree.RaycastSingle(cameraRay, RAY_TRIANGLE, camera.farClip,
pickModeDrawableFlags[pickMode], 0x7fffffff);
if (result.drawable !is null)
res = cameraNode.position + cameraNode.worldRotation * Vector3(0, 0, result.distance);
}
return res;
}