浏览代码

Merge pull request #527 from AtomicGameEngine/JME-ATOMIC-526

Handle node deletion with context menu properly, guard against deleti…
JoshEngebretson 10 年之前
父节点
当前提交
b599070d76
共有 2 个文件被更改,包括 19 次插入7 次删除
  1. 14 5
      Script/AtomicEditor/ui/frames/menus/HierarchyFrameMenu.ts
  2. 5 2
      Source/AtomicJS/Javascript/JSScene.cpp

+ 14 - 5
Script/AtomicEditor/ui/frames/menus/HierarchyFrameMenu.ts

@@ -54,7 +54,7 @@ class HierarchyFrameMenus extends Atomic.ScriptObject {
             }
 
             if (child) {
-                child.scene.sendEvent("SceneEditNodeCreated", { node : child});
+                child.scene.sendEvent("SceneEditNodeCreated", { node: child });
             }
 
             return true;
@@ -69,7 +69,7 @@ class HierarchyFrameMenus extends Atomic.ScriptObject {
 
         if (target.id == "node context menu") {
 
-            var node = <Atomic.Node> target['node'];
+            var node = <Atomic.Node>target['node'];
 
             if (!node) {
                 return false;
@@ -77,13 +77,22 @@ class HierarchyFrameMenus extends Atomic.ScriptObject {
 
             if (refid == "delete_node") {
 
-              node.removeAllComponents();
-              node.remove();
+                if (node instanceof Atomic.Scene)
+                    return;
+
+                var scene = node.scene;
+                scene.sendEvent("SceneEditAddRemoveNodes", { end: false });
+                scene.sendEvent("SceneEditNodeRemoved", { node: node, parent: node.parent, scene: scene });
+                node.remove();
+                scene.sendEvent("SceneEditAddRemoveNodes", { end: true });
 
             } else if (refid == "duplicate_node") {
 
+                if (node instanceof Atomic.Scene)
+                    return;
+
                 var newnode = node.clone();
-                node.scene.sendEvent("SceneEditNodeCreated", { node : newnode});
+                node.scene.sendEvent("SceneEditNodeCreated", { node: newnode });
             }
 
             return true;

+ 5 - 2
Source/AtomicJS/Javascript/JSScene.cpp

@@ -182,10 +182,13 @@ static int Node_GetComponents(duk_context* ctx)
 
     duk_push_array(ctx);
 
+    int count = 0;
     for (unsigned i = 0; i < dest.Size(); i++)
     {
-        if (js_push_class_object_instance(ctx, dest[i], "Component"))
-            duk_put_prop_index(ctx, -2, i);
+        if (js_push_class_object_instance(ctx, dest[i], dest[i]->GetTypeName().CString()))
+        {
+            duk_put_prop_index(ctx, -2, count++);
+        }
     }
 
     return 1;