From 35780ad7cfae50a3a3d32d205138ad38bb435304 Mon Sep 17 00:00:00 2001 From: Bruno Dilly Date: Tue, 4 Sep 2012 22:42:35 +0000 Subject: [PATCH] ephysics: activate all bodies when one is deleted Otherwise it can lead to scenarios when a body 1, below body 2 is deleted and body 2 will stay freezed in the air. Gravity won't start to act over it until it's activated again. SVN revision: 76155 --- legacy/ephysics/src/lib/ephysics_world.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/legacy/ephysics/src/lib/ephysics_world.cpp b/legacy/ephysics/src/lib/ephysics_world.cpp index 6baec1fff1..093c3237f8 100644 --- a/legacy/ephysics/src/lib/ephysics_world.cpp +++ b/legacy/ephysics/src/lib/ephysics_world.cpp @@ -360,6 +360,7 @@ Eina_Bool ephysics_world_body_del(EPhysics_World *world, EPhysics_Body *body) { btSoftBody *soft_body; + EPhysics_Body *bd; if (world->walking) { @@ -379,6 +380,16 @@ ephysics_world_body_del(EPhysics_World *world, EPhysics_Body *body) world->bodies = eina_inlist_remove(world->bodies, EINA_INLIST_GET(body)); ephysics_orphan_body_del(body); + /* Activate all the bodies after a body is deleted. + Otherwise it can lead to scenarios when a body 1, below body 2 is deleted + and body 2 will stay freezed in the air. Gravity won't start to + act over it until it's activated again. */ + EINA_INLIST_FOREACH(world->bodies, bd) + { + btRigidBody *rigid_body = ephysics_body_rigid_body_get(bd); + rigid_body->activate(1); + } + return EINA_TRUE; }