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
This commit is contained in:
parent
d1ee195260
commit
2247ebe16e
Notes:
blender-bot
2023-02-14 11:57:27 +01:00
Referenced by issue #36388, Delete recursive DupliGroup objects.
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue