Commit: 2247ebe16ee8f08755c8ca925167300e78637e18
Author: Thomas Szepe
Date:   Sun Oct 11 14:08:38 2015 +0200
Branches: master
https://developer.blender.org/rB2247ebe16ee8f08755c8ca925167300e78637e18

BGE: Add recursive dupli group deletion

This patch will delete all associated objects from a group instance (dupli 
group) if the are deleted.

Reviewers: brita_, sybren, lordloki, moguri

Reviewed By: lordloki, moguri

Projects: #game_engine

Maniphest Tasks: T36388

Differential Revision: https://developer.blender.org/D1205

===================================================================

M       source/gameengine/Ketsji/KX_Scene.cpp
M       source/gameengine/Ketsji/KX_Scene.h

===================================================================

diff --git a/source/gameengine/Ketsji/KX_Scene.cpp 
b/source/gameengine/Ketsji/KX_Scene.cpp
index 7237369..c9c6337 100644
--- a/source/gameengine/Ketsji/KX_Scene.cpp
+++ b/source/gameengine/Ketsji/KX_Scene.cpp
@@ -1006,17 +1006,28 @@ void KX_Scene::RemoveObject(class CValue* gameobj)
        //newobj->SetSGNode(0);
 }
 
+void KX_Scene::RemoveDupliGroup(class CValue *gameobj)
+{
+       KX_GameObject *newobj = (KX_GameObject *) gameobj;
+
+       if (newobj->IsDupliGroup()) {
+               for (int i = 0; i < newobj->GetInstanceObjects()->GetCount(); 
i++) {
+                       CValue *obj = newobj->GetInstanceObjects()->GetValue(i);
+                       DelayedRemoveObject(obj);
+               }
+       }
+}
+
 void KX_Scene::DelayedRemoveObject(class CValue* gameobj)
 {
-       //KX_GameObject* newobj = (KX_GameObject*) gameobj;
+       RemoveDupliGroup(gameobj);
+
        if (!m_euthanasyobjects->SearchValue(gameobj))
        {
                m_euthanasyobjects->Add(gameobj->AddRef());
-       } 
+       }
 }
 
-
-
 int KX_Scene::NewRemoveObject(class CValue* gameobj)
 {
        int ret;
diff --git a/source/gameengine/Ketsji/KX_Scene.h 
b/source/gameengine/Ketsji/KX_Scene.h
index 4f7ad98..046ad25 100644
--- a/source/gameengine/Ketsji/KX_Scene.h
+++ b/source/gameengine/Ketsji/KX_Scene.h
@@ -339,6 +339,7 @@ public:
        void RemoveNodeDestructObject(SG_IObject* node,
                                      CValue* gameobj);
        void RemoveObject(CValue* gameobj);
+       void RemoveDupliGroup(CValue *gameobj);
        void DelayedRemoveObject(CValue* gameobj);
        
        int NewRemoveObject(CValue* gameobj);

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to