@@ -811,14 +811,7 @@ namespace LevelEditor
811
811
if (!s_moveStarted)
812
812
{
813
813
s_moveStarted = true ;
814
- s_moveStartPos = { worldPos.x , worldPos.z };
815
-
816
- s_moveStarted = true ;
817
- if (s_view == EDIT_VIEW_3D)
818
- {
819
- s_prevPos = s_curVtxPos;
820
- }
821
-
814
+
822
815
EditorSector* sector = nullptr ;
823
816
EditorObject* obj = nullptr ;
824
817
Entity* entity = nullptr ;
@@ -842,15 +835,32 @@ namespace LevelEditor
842
835
top = obj->pos .y + entity->size .z ;
843
836
}
844
837
838
+ const f32 dF = fabsf (worldPos.y - base);
839
+ const f32 dC = fabsf (worldPos.y - top);
840
+ const f32 yBase = dF <= dC ? base : top;
841
+
842
+ if (s_view == EDIT_VIEW_3D)
843
+ {
844
+ // If 3D, we want to grab the base or the top of the object since that is the plane that will be used to
845
+ // move the object going forward.
846
+ edit_setTransformAnchor ({ 0 .0f , yBase, 0 .0f });
847
+ s_cursor3d = edit_gizmoCursor3d ();
848
+ Vec2f snapPos = { s_cursor3d.x , s_cursor3d.z };
849
+ snapToGrid (&snapPos);
850
+ s_cursor3d = { snapPos.x , s_cursor3d.y , snapPos.z };
851
+ worldPos = s_cursor3d;
852
+ s_curVtxPos = s_cursor3d;
853
+ s_prevPos = s_curVtxPos;
854
+ }
855
+ s_moveStartPos = { worldPos.x , worldPos.z };
856
+
845
857
if (moveOnYAxis && obj)
846
858
{
847
- const f32 dF = fabsf (worldPos.y - base);
848
- const f32 dC = fabsf (worldPos.y - top);
849
- edit_setTransformAnchor ({ s_moveStartPos.x , dF <= dC ? base : top, s_moveStartPos.z });
859
+ edit_setTransformAnchor (worldPos);
850
860
}
851
861
else
852
862
{
853
- if (obj) { s_grid.height = base; worldPos. y = s_grid. height ; }
863
+ if (obj) { s_grid.height = yBase ; }
854
864
edit_setTransformAnchor ({ s_moveStartPos.x , worldPos.y , s_moveStartPos.z });
855
865
}
856
866
0 commit comments