Przeglądaj źródła

Fixed invalid calculation for editor window cursor hover
When dragging objects in scene use their center instead of pivot, in order to properly place objects with weird pivot points in front of the camera

BearishSun 9 lat temu
rodzic
commit
3e78ef950b

+ 15 - 1
Source/MBansheeEditor/Windows/Scene/SceneWindow.cs

@@ -84,6 +84,7 @@ namespace BansheeEditor
         // Drag & drop
         private bool dragActive;
         private SceneObject draggedSO;
+        private Vector3 draggedSOOffset;
 
         /// <summary>
         /// Returns the scene camera.
@@ -539,6 +540,11 @@ namespace BansheeEditor
 
                                         Renderable renderable = draggedSO.AddComponent<Renderable>();
                                         renderable.Mesh = mesh;
+
+                                        if (mesh != null)
+                                            draggedSOOffset = mesh.Bounds.Box.Center;
+                                        else
+                                            draggedSOOffset = Vector3.Zero;
                                     }
 
                                     break;
@@ -549,6 +555,14 @@ namespace BansheeEditor
                                     {
                                         Prefab prefab = ProjectLibrary.Load<Prefab>(draggedPaths[i]);
                                         draggedSO = UndoRedo.Instantiate(prefab, "Instantiating " + prefab.Name);
+
+                                        if (draggedSO != null)
+                                        {
+                                            AABox draggedObjBounds = EditorUtility.CalculateBounds(draggedSO);
+                                            draggedSOOffset = draggedObjBounds.Center;
+                                        }
+                                        else
+                                            draggedSOOffset = Vector3.Zero;
                                     }
 
                                     break;
@@ -560,7 +574,7 @@ namespace BansheeEditor
                     if (draggedSO != null)
                     {
                         Ray worldRay = camera.ViewportToWorldRay(scenePos);
-                        draggedSO.Position = worldRay*DefaultPlacementDepth;
+                        draggedSO.Position = worldRay*DefaultPlacementDepth - draggedSOOffset;
                     }
                 }
 

+ 1 - 3
Source/SBansheeEditor/Source/BsScriptEditorWindow.cpp

@@ -207,9 +207,7 @@ namespace BansheeEngine
 			if(Platform::isPointOverWindow(*renderWindow, pointerPos))
 			{
 				Rect2I bounds = thisPtr->getEditorWidget()->getBounds();
-
-				Vector2I widgetPos(bounds.x, bounds.y);
-				Vector2I screenPos = widget->widgetToScreenPos(widgetPos);
+				Vector2I screenPos = widget->widgetToScreenPos(Vector2I(0, 0));
 
 				bounds.x = screenPos.x;
 				bounds.y = screenPos.y;