[Bf-blender-cvs] [2247ebe] master: BGE: Add recursive dupli group deletion
Thomas Szepe
noreply at git.blender.org
Sun Oct 11 14:10:16 CEST 2015
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);
More information about the Bf-blender-cvs
mailing list