diff options
author | Thomas Szepe <HG1_public@gmx.net> | 2015-10-11 15:08:38 +0300 |
---|---|---|
committer | Thomas Szepe <HG1_public@gmx.net> | 2015-10-11 15:08:38 +0300 |
commit | 2247ebe16ee8f08755c8ca925167300e78637e18 (patch) | |
tree | 46839d02a2886a15f4d0387d1d7da96ef4eaccc8 /source/gameengine | |
parent | d1ee195260c3676eb822a0025167ea8a785ccfa5 (diff) |
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
Diffstat (limited to 'source/gameengine')
-rw-r--r-- | source/gameengine/Ketsji/KX_Scene.cpp | 19 | ||||
-rw-r--r-- | source/gameengine/Ketsji/KX_Scene.h | 1 |
2 files changed, 16 insertions, 4 deletions
diff --git a/source/gameengine/Ketsji/KX_Scene.cpp b/source/gameengine/Ketsji/KX_Scene.cpp index 723736906a9..c9c63371713 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 4f7ad98f30d..046ad25c09c 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); |