diff options
Diffstat (limited to 'servers/physics/step_sw.cpp')
-rw-r--r-- | servers/physics/step_sw.cpp | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/servers/physics/step_sw.cpp b/servers/physics/step_sw.cpp index b7815d2250..6d95804875 100644 --- a/servers/physics/step_sw.cpp +++ b/servers/physics/step_sw.cpp @@ -49,7 +49,7 @@ void StepSW::_populate_island(BodySW* p_body,BodySW** p_island,ConstraintSW **p_ if (i==E->get()) continue; BodySW *b = c->get_body_ptr()[i]; - if (b->get_island_step()==_step || b->get_mode()==PhysicsServer::BODY_MODE_STATIC) + if (b->get_island_step()==_step || b->get_mode()==PhysicsServer::BODY_MODE_STATIC || b->get_mode()==PhysicsServer::BODY_MODE_KINEMATIC) continue; //no go _populate_island(c->get_body_ptr()[i],p_island,p_constraint_island); } @@ -86,8 +86,10 @@ void StepSW::_check_suspend(BodySW *p_island,float p_delta) { BodySW *b = p_island; while(b) { - if (b->get_mode()==PhysicsServer::BODY_MODE_STATIC) + if (b->get_mode()==PhysicsServer::BODY_MODE_STATIC || b->get_mode()==PhysicsServer::BODY_MODE_KINEMATIC) { + b=b->get_island_next(); continue; //ignore for static + } if (!b->sleep_test(p_delta)) can_sleep=false; @@ -100,8 +102,10 @@ void StepSW::_check_suspend(BodySW *p_island,float p_delta) { b = p_island; while(b) { - if (b->get_mode()==PhysicsServer::BODY_MODE_STATIC) + if (b->get_mode()==PhysicsServer::BODY_MODE_STATIC || b->get_mode()==PhysicsServer::BODY_MODE_KINEMATIC) { + b=b->get_island_next(); continue; //ignore for static + } bool active = b->is_active(); @@ -131,6 +135,7 @@ void StepSW::step(SpaceSW* p_space,float p_delta,int p_iterations) { active_count++; } + p_space->set_active_objects(active_count); /* GENERATE CONSTRAINT ISLANDS */ @@ -164,6 +169,8 @@ void StepSW::step(SpaceSW* p_space,float p_delta,int p_iterations) { b=b->next(); } + p_space->set_island_count(island_count); + const SelfList<AreaSW>::List &aml = p_space->get_moved_area_list(); while(aml.first()) { @@ -207,9 +214,9 @@ void StepSW::step(SpaceSW* p_space,float p_delta,int p_iterations) { b = body_list->first(); while(b) { - + const SelfList<BodySW>*n=b->next(); b->self()->integrate_velocities(p_delta); - b=b->next(); + b=n; } /* SLEEP / WAKE UP ISLANDS */ |