fix cloning (don't clone the worldspam)
authorRudolf Polzer <divverent@alientrap.org>
Sat, 4 Sep 2010 11:52:03 +0000 (13:52 +0200)
committerRudolf Polzer <divverent@alientrap.org>
Sat, 4 Sep 2010 11:52:03 +0000 (13:52 +0200)
radiant/mainframe.cpp
radiant/select.cpp

index 05d9e52..7f7eb06 100644 (file)
@@ -1196,6 +1196,11 @@ public:
     if(path.size() == 1)
       return true;
 
+    // ignore worldspawn, but keep checking children
+    NodeSmartReference me(path.top().get());
+    if(me == Map_FindOrInsertWorldspawn(g_map))
+           return true;
+
     if(!path.top().get().isRoot())
     {
       Selectable* selectable = Instance_getSelectable(instance);
@@ -1213,6 +1218,11 @@ public:
     if(path.size() == 1)
       return;
 
+    // ignore worldspawn, but keep checking children
+    NodeSmartReference me(path.top().get());
+    if(me == Map_FindOrInsertWorldspawn(g_map))
+           return;
+
     if(!path.top().get().isRoot())
     {
       Selectable* selectable = Instance_getSelectable(instance);
index 19af600..79721e9 100644 (file)
@@ -347,12 +347,18 @@ public:
   bool pre(const scene::Path& path, scene::Instance& instance) const
   {
     ++m_depth;
+
+    // ignore worldspawn
+    NodeSmartReference me(path.top().get());
+    if(me == Map_FindOrInsertWorldspawn(g_map))
+           return false;
+
     if(m_depth == 2) // entity depth
     {
       // traverse and select children if any one is selected
          if(instance.childSelected())
                Instance_setSelected(instance, true);
-      return Node_getEntity(path.top())->isContainer() && instance.childSelected();
+      return Node_getEntity(path.top())->isContainer() && instance.isSelected();
     }
     else if(m_depth == 3) // primitive depth
     {