Просмотр исходного кода

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 лет назад
Родитель
Сommit
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;