feat(editor): push part above snapped-to surface
This commit is contained in:
parent
1095a8c33b
commit
4a50ed159b
1 changed files with 6 additions and 5 deletions
|
@ -138,13 +138,14 @@ void MainGLWidget::handleObjectDrag(QMouseEvent* evt) {
|
||||||
if (!rayHit) return;
|
if (!rayHit) return;
|
||||||
|
|
||||||
Data::Vector3 vec = rayHit->worldPoint;
|
Data::Vector3 vec = rayHit->worldPoint;
|
||||||
Data::CFrame targetFrame = partFromBody(rayHit->body)->cframe;
|
Data::CFrame targetFrame = partFromBody(rayHit->body)->cframe.Rotation();
|
||||||
Data::CFrame localFrame = targetFrame.Inverse() * draggingObject->lock()->cframe;
|
Data::CFrame localFrame = (targetFrame.Inverse() * draggingObject->lock()->cframe).Rotation();
|
||||||
|
|
||||||
// Snap axis
|
// Snap axis
|
||||||
Data::CFrame newFrame = targetFrame * snapCFrame(localFrame);
|
localFrame = snapCFrame(localFrame);
|
||||||
draggingObject->lock()->cframe = newFrame.Rotation() + vec;
|
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());
|
syncPartPhysics(draggingObject->lock());
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue