Tighten editor scene mutation boundary
This commit is contained in:
@@ -1126,7 +1126,9 @@ bool SceneViewportMoveGizmo::TryBeginDrag(
|
||||
return true;
|
||||
}
|
||||
|
||||
void SceneViewportMoveGizmo::UpdateDrag(const SceneViewportMoveGizmoContext& context) {
|
||||
void SceneViewportMoveGizmo::UpdateDrag(
|
||||
const SceneViewportMoveGizmoContext& context,
|
||||
IUndoManager& undoManager) {
|
||||
if (m_dragMode == DragMode::None ||
|
||||
context.selectedObject == nullptr ||
|
||||
context.selectedObject->GetID() != m_activeEntityId ||
|
||||
@@ -1160,8 +1162,10 @@ void SceneViewportMoveGizmo::UpdateDrag(const SceneViewportMoveGizmoContext& con
|
||||
m_dragObjects[index]->GetTransform() == nullptr) {
|
||||
continue;
|
||||
}
|
||||
m_dragObjects[index]->GetTransform()->SetPosition(
|
||||
m_dragStartObjectWorldPositions[index] + worldDelta);
|
||||
undoManager.ApplyWorldTransformPreview(
|
||||
m_dragObjects[index]->GetID(),
|
||||
m_dragStartObjectWorldPositions[index] + worldDelta,
|
||||
m_dragObjects[index]->GetTransform()->GetRotation());
|
||||
}
|
||||
return;
|
||||
}
|
||||
@@ -1178,8 +1182,10 @@ void SceneViewportMoveGizmo::UpdateDrag(const SceneViewportMoveGizmoContext& con
|
||||
m_dragObjects[index]->GetTransform() == nullptr) {
|
||||
continue;
|
||||
}
|
||||
m_dragObjects[index]->GetTransform()->SetPosition(
|
||||
m_dragStartObjectWorldPositions[index] + worldDelta);
|
||||
undoManager.ApplyWorldTransformPreview(
|
||||
m_dragObjects[index]->GetID(),
|
||||
m_dragStartObjectWorldPositions[index] + worldDelta,
|
||||
m_dragObjects[index]->GetTransform()->GetRotation());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1557,7 +1563,8 @@ bool SceneViewportRotateGizmo::TryBeginDrag(
|
||||
}
|
||||
|
||||
void SceneViewportRotateGizmo::UpdateDrag(
|
||||
const SceneViewportRotateGizmoContext& context) {
|
||||
const SceneViewportRotateGizmoContext& context,
|
||||
IUndoManager& undoManager) {
|
||||
if (m_activeAxis == SceneViewportRotateGizmoAxis::None ||
|
||||
context.selectedObject == nullptr ||
|
||||
context.selectedObject->GetID() != m_activeEntityId ||
|
||||
@@ -1622,22 +1629,21 @@ void SceneViewportRotateGizmo::UpdateDrag(
|
||||
continue;
|
||||
}
|
||||
|
||||
if (m_rotateAroundSharedPivot) {
|
||||
gameObject->GetTransform()->SetPosition(
|
||||
m_dragStartPivotWorldPosition +
|
||||
worldDeltaRotation *
|
||||
(m_dragStartWorldPositions[index] - m_dragStartPivotWorldPosition));
|
||||
} else {
|
||||
gameObject->GetTransform()->SetPosition(m_dragStartWorldPositions[index]);
|
||||
}
|
||||
const Vector3 previewPosition =
|
||||
m_rotateAroundSharedPivot
|
||||
? m_dragStartPivotWorldPosition +
|
||||
worldDeltaRotation *
|
||||
(m_dragStartWorldPositions[index] - m_dragStartPivotWorldPosition)
|
||||
: m_dragStartWorldPositions[index];
|
||||
|
||||
if (m_localSpace && m_activeAxis != SceneViewportRotateGizmoAxis::View) {
|
||||
gameObject->GetTransform()->SetRotation(
|
||||
m_dragStartWorldRotations[index] * localDeltaRotation);
|
||||
} else {
|
||||
gameObject->GetTransform()->SetRotation(
|
||||
worldDeltaRotation * m_dragStartWorldRotations[index]);
|
||||
}
|
||||
const Quaternion previewRotation =
|
||||
m_localSpace && m_activeAxis != SceneViewportRotateGizmoAxis::View
|
||||
? m_dragStartWorldRotations[index] * localDeltaRotation
|
||||
: worldDeltaRotation * m_dragStartWorldRotations[index];
|
||||
undoManager.ApplyWorldTransformPreview(
|
||||
gameObject->GetID(),
|
||||
previewPosition,
|
||||
previewRotation);
|
||||
}
|
||||
|
||||
SceneViewportRotateGizmoContext drawContext = context;
|
||||
@@ -2091,7 +2097,8 @@ bool SceneViewportScaleGizmo::TryBeginDrag(
|
||||
}
|
||||
|
||||
void SceneViewportScaleGizmo::UpdateDrag(
|
||||
const SceneViewportScaleGizmoContext& context) {
|
||||
const SceneViewportScaleGizmoContext& context,
|
||||
IUndoManager& undoManager) {
|
||||
if (m_activeHandle == SceneViewportScaleGizmoHandle::None ||
|
||||
context.selectedObject == nullptr ||
|
||||
context.selectedObject->GetTransform() == nullptr ||
|
||||
@@ -2137,7 +2144,7 @@ void SceneViewportScaleGizmo::UpdateDrag(
|
||||
}
|
||||
}
|
||||
|
||||
context.selectedObject->GetTransform()->SetLocalScale(localScale);
|
||||
undoManager.ApplyLocalScalePreview(context.selectedObject->GetID(), localScale);
|
||||
switch (m_activeHandle) {
|
||||
case SceneViewportScaleGizmoHandle::X:
|
||||
m_dragCurrentVisualScale = Vector3(
|
||||
|
||||
Reference in New Issue
Block a user