Browse Source

support resource drag to scene

Golden Li 9 years ago
parent
commit
3e35bb0afa
1 changed files with 40 additions and 0 deletions
  1. 40 0
      bin/Data/Scripts/Editor/EditorResourceBrowser.as

+ 40 - 0
bin/Data/Scripts/Editor/EditorResourceBrowser.as

@@ -992,6 +992,19 @@ void HandleBrowserFileDragBegin(StringHash eventType, VariantMap& eventData)
     @browserDragFile = GetBrowserFileFromUIElement(uiElement);
 }
 
+Vector3 GetNodeSize(Node@ node)
+{
+    CollisionShape@ shape = node.GetComponent("CollisionShape");
+    if (shape !is null)
+        return shape.size;
+
+    Drawable@ object = node.GetComponent("Drawable");
+    if (object !is null)
+        return object.boundingBox.size;
+
+    return Vector3(0, 0, 0);
+}
+
 void HandleBrowserFileDragEnd(StringHash eventType, VariantMap& eventData)
 {
     if (@browserDragFile is null)
@@ -1001,6 +1014,7 @@ void HandleBrowserFileDragEnd(StringHash eventType, VariantMap& eventData)
     if (element !is null)
         return;
 
+    Node@ createdNode = null;
     if (browserDragFile.resourceType == RESOURCE_TYPE_MATERIAL)
     {
         StaticModel@ model = cast<StaticModel>(GetDrawableAtMousePostion());
@@ -1009,6 +1023,32 @@ void HandleBrowserFileDragEnd(StringHash eventType, VariantMap& eventData)
             AssignMaterial(model, browserDragFile.resourceKey);
         }
     }
+    else if (browserDragFile.resourceType == RESOURCE_TYPE_PREFAB)
+    {
+        createdNode = LoadNode(browserDragFile.GetFullPath());
+    }
+    else if (browserDragFile.resourceType == RESOURCE_TYPE_MODEL)
+    {
+        createdNode = CreateNode(REPLICATED);
+        Model@ model = cache.GetResource("Model", browserDragFile.resourceKey);
+        if (model.skeleton.numBones > 0)
+        {
+            AnimatedModel@ am = createdNode.CreateComponent("AnimatedModel");
+            am.model = model;
+        }
+        else
+        {
+            StaticModel@ sm = createdNode.CreateComponent("StaticModel");
+            sm.model = model;
+        }
+    }
+
+    if (createdNode !is null)
+    {
+        Vector3 pos = GetScreenCollision(ui.cursorPosition);
+        pos.y += GetNodeSize(createdNode).y/2;
+        createdNode.worldPosition = pos;
+    }
 
     browserDragFile = null;
     browserDragComponent = null;