소스 검색

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 년 전
부모
커밋
3e78ef950b
2개의 변경된 파일16개의 추가작업 그리고 4개의 파일을 삭제
  1. 15 1
      Source/MBansheeEditor/Windows/Scene/SceneWindow.cs
  2. 1 3
      Source/SBansheeEditor/Source/BsScriptEditorWindow.cpp

+ 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;