From 4a50ed159be4b4ed0d5580bc618e57c1bede157b Mon Sep 17 00:00:00 2001 From: maelstrom Date: Mon, 31 Mar 2025 01:59:08 +0200 Subject: [PATCH] feat(editor): push part above snapped-to surface --- editor/mainglwidget.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/editor/mainglwidget.cpp b/editor/mainglwidget.cpp index 3f46a18..66ce9fd 100644 --- a/editor/mainglwidget.cpp +++ b/editor/mainglwidget.cpp @@ -138,13 +138,14 @@ void MainGLWidget::handleObjectDrag(QMouseEvent* evt) { if (!rayHit) return; Data::Vector3 vec = rayHit->worldPoint; - Data::CFrame targetFrame = partFromBody(rayHit->body)->cframe; - Data::CFrame localFrame = targetFrame.Inverse() * draggingObject->lock()->cframe; + Data::CFrame targetFrame = partFromBody(rayHit->body)->cframe.Rotation(); + Data::CFrame localFrame = (targetFrame.Inverse() * draggingObject->lock()->cframe).Rotation(); // Snap axis - Data::CFrame newFrame = targetFrame * snapCFrame(localFrame); - draggingObject->lock()->cframe = newFrame.Rotation() + vec; - + localFrame = snapCFrame(localFrame); + localFrame = localFrame; + Data::CFrame newFrame = targetFrame * localFrame; + draggingObject->lock()->cframe = newFrame + vec + localFrame.Rotation() * ((localFrame.Inverse().Rotation() * rayHit->worldNormal) * draggingObject->lock()->size / 2); syncPartPhysics(draggingObject->lock()); }