EPhysics: fix issues with force application

This patch fixes the forces apply, the current implementation will
never apply it. We're also applying rate twice, get rid of rate on
forces_apply function.


SVN revision: 80719
This commit is contained in:
Leandro Dorileo 2012-12-11 21:11:12 +00:00
parent 2e8fcf0a23
commit 2ccf6d2a11
1 changed files with 12 additions and 7 deletions

View File

@ -544,6 +544,11 @@ _ephysics_body_forces_update(EPhysics_Body *body)
body->force.torque_y = body->rigid_body->getTotalTorque().getY(); body->force.torque_y = body->rigid_body->getTotalTorque().getY();
body->force.torque_z = body->rigid_body->getTotalTorque().getZ(); body->force.torque_z = body->rigid_body->getTotalTorque().getZ();
body->rigid_body->clearForces(); body->rigid_body->clearForces();
DBG("forces updated: %lf, %lf, %lf", body->force.x, body->force.y,
body->force.z);
DBG("torque updated: %lf, %lf, %lf", body->force.torque_x,
body->force.torque_y, body->force.torque_z);
} }
static inline void static inline void
@ -1683,18 +1688,18 @@ _ephysics_body_outside_render_area_check(EPhysics_Body *body)
void void
ephysics_body_forces_apply(EPhysics_Body *body) ephysics_body_forces_apply(EPhysics_Body *body)
{ {
double rate;
if (!((body->force.x) || (body->force.y) || (body->force.z) || if (!((body->force.x) || (body->force.y) || (body->force.z) ||
(body->force.torque_x) || (body->force.torque_y) || (body->force.torque_x) || (body->force.torque_y) ||
(body->force.torque_z))) (body->force.torque_z)))
return; return;
DBG("body: %p, applying forces: %lf, %lf, %lf", body, body->force.x,
body->force.y, body->force.z);
rate = ephysics_world_rate_get(body->world);
ephysics_body_activate(body, EINA_TRUE); ephysics_body_activate(body, EINA_TRUE);
body->rigid_body->applyCentralForce(btVector3(body->force.x / rate, body->rigid_body->applyCentralForce(btVector3(body->force.x,
body->force.y / rate, body->force.y,
body->force.z / rate)); body->force.z));
body->rigid_body->applyTorque(btVector3(body->force.torque_x, body->rigid_body->applyTorque(btVector3(body->force.torque_x,
body->force.torque_y, body->force.torque_y,
body->force.torque_z)); body->force.torque_z));