From c5cd6d709bf3432bee0b1cfedd70eaac42011a08 Mon Sep 17 00:00:00 2001 From: Bill Meltsner Date: Thu, 29 Sep 2011 11:09:08 -0400 Subject: [PATCH] Fix a lot of scaling issues --HG-- branch : box2d-update --- src/modules/physics/box2d/Body.cpp | 10 ++++++---- src/modules/physics/box2d/FrictionJoint.cpp | 8 ++++---- src/modules/physics/box2d/Joint.cpp | 4 ++-- src/modules/physics/box2d/MouseJoint.cpp | 4 ++-- src/modules/physics/box2d/RevoluteJoint.cpp | 4 ++-- src/modules/physics/box2d/RevoluteJoint.h | 4 ++-- src/modules/physics/box2d/WheelJoint.cpp | 18 +++++++++--------- 7 files changed, 27 insertions(+), 25 deletions(-) diff --git a/src/modules/physics/box2d/Body.cpp b/src/modules/physics/box2d/Body.cpp index 44fb96eb5..22d38f4e2 100644 --- a/src/modules/physics/box2d/Body.cpp +++ b/src/modules/physics/box2d/Body.cpp @@ -176,22 +176,24 @@ namespace box2d void Body::applyAngularImpulse(float impulse) { - body->ApplyAngularImpulse(Physics::scaleDown(impulse)); + // Angular impulse is in kg*m^2/s, meaning it needs to be scaled twice + body->ApplyAngularImpulse(Physics::scaleDown(Physics::scaleDown(impulse))); } void Body::applyTorque(float t) { - body->ApplyTorque(t); + // Torque is in N*m, or kg*m^2/s^2, meaning it also needs to be scaled twice + body->ApplyTorque(Physics::scaleDown(Physics::scaleDown(t))); } void Body::applyForce(float fx, float fy, float rx, float ry) { - body->ApplyForce(b2Vec2(fx, fy), Physics::scaleDown(b2Vec2(rx, ry))); + body->ApplyForce(Physics::scaleDown(b2Vec2(fx, fy)), Physics::scaleDown(b2Vec2(rx, ry))); } void Body::applyForce(float fx, float fy) { - body->ApplyForce(b2Vec2(fx, fy), body->GetWorldCenter()); + body->ApplyForce(Physics::scaleDown(b2Vec2(fx, fy)), body->GetWorldCenter()); } void Body::setX(float x) diff --git a/src/modules/physics/box2d/FrictionJoint.cpp b/src/modules/physics/box2d/FrictionJoint.cpp index 699bd478a..7449aab19 100644 --- a/src/modules/physics/box2d/FrictionJoint.cpp +++ b/src/modules/physics/box2d/FrictionJoint.cpp @@ -50,22 +50,22 @@ namespace box2d void FrictionJoint::setMaxForce(float force) { - joint->SetMaxForce(force); + joint->SetMaxForce(Physics::scaleDown(force)); } float FrictionJoint::getMaxForce() const { - return joint->GetMaxForce(); + return Physics::scaleUp(joint->GetMaxForce()); } void FrictionJoint::setMaxTorque(float torque) { - joint->SetMaxTorque(torque); + joint->SetMaxTorque(Physics::scaleDown(Physics::scaleDown(torque))); } float FrictionJoint::getMaxTorque() const { - return joint->GetMaxTorque(); + return Physics::scaleUp(Physics::scaleUp(joint->GetMaxTorque())); } diff --git a/src/modules/physics/box2d/Joint.cpp b/src/modules/physics/box2d/Joint.cpp index 1aa48f00d..13a29f18a 100644 --- a/src/modules/physics/box2d/Joint.cpp +++ b/src/modules/physics/box2d/Joint.cpp @@ -98,7 +98,7 @@ namespace box2d int Joint::getReactionForce(lua_State * L) { float dt = (float)luaL_checknumber(L, 2); - b2Vec2 v = joint->GetReactionForce(dt); + b2Vec2 v = Physics::scaleUp(joint->GetReactionForce(dt)); lua_pushnumber(L, v.x); lua_pushnumber(L, v.y); return 2; @@ -106,7 +106,7 @@ namespace box2d float Joint::getReactionTorque(float dt) { - return joint->GetReactionTorque(dt); + return Physics::scaleUp(Physics::scaleUp(joint->GetReactionTorque(dt))); } b2Joint * Joint::createJoint(b2JointDef * def) diff --git a/src/modules/physics/box2d/MouseJoint.cpp b/src/modules/physics/box2d/MouseJoint.cpp index 9ea217b6f..b800645c8 100644 --- a/src/modules/physics/box2d/MouseJoint.cpp +++ b/src/modules/physics/box2d/MouseJoint.cpp @@ -63,12 +63,12 @@ namespace box2d void MouseJoint::setMaxForce(float force) { - joint->SetMaxForce(force); + joint->SetMaxForce(Physics::scaleDown(force)); } float MouseJoint::getMaxForce() const { - return joint->GetMaxForce(); + return Physics::scaleUp(joint->GetMaxForce()); } void MouseJoint::setFrequency(float hz) diff --git a/src/modules/physics/box2d/RevoluteJoint.cpp b/src/modules/physics/box2d/RevoluteJoint.cpp index a80ffe303..45b66856d 100644 --- a/src/modules/physics/box2d/RevoluteJoint.cpp +++ b/src/modules/physics/box2d/RevoluteJoint.cpp @@ -70,7 +70,7 @@ namespace box2d void RevoluteJoint::setMaxMotorTorque(float torque) { - joint->SetMaxMotorTorque(torque); + joint->SetMaxMotorTorque(Physics::scaleDown(Physics::scaleDown(torque))); } void RevoluteJoint::setMotorSpeed(float speed) @@ -85,7 +85,7 @@ namespace box2d float RevoluteJoint::getMotorTorque(float inv_dt) const { - return joint->GetMotorTorque(inv_dt); + return Physics::scaleUp(Physics::scaleUp(joint->GetMotorTorque(inv_dt))); } void RevoluteJoint::enableLimit(bool limit) diff --git a/src/modules/physics/box2d/RevoluteJoint.h b/src/modules/physics/box2d/RevoluteJoint.h index c5b255e23..3043f19c6 100644 --- a/src/modules/physics/box2d/RevoluteJoint.h +++ b/src/modules/physics/box2d/RevoluteJoint.h @@ -76,12 +76,12 @@ namespace box2d void setMaxMotorTorque(float torque); /** - * Sets the motor speed in degrees per second. + * Sets the motor speed in radians per second. **/ void setMotorSpeed(float speed); /** - * Gets the motor speed in degrees per second. + * Gets the motor speed in radians per second. **/ float getMotorSpeed() const; diff --git a/src/modules/physics/box2d/WheelJoint.cpp b/src/modules/physics/box2d/WheelJoint.cpp index 2a7fb7317..c818d1fb6 100644 --- a/src/modules/physics/box2d/WheelJoint.cpp +++ b/src/modules/physics/box2d/WheelJoint.cpp @@ -70,47 +70,47 @@ namespace box2d void WheelJoint::setMotorSpeed(float speed) { - joint->SetMotorSpeed(Physics::scaleDown(speed)); + joint->SetMotorSpeed(speed); } float WheelJoint::getMotorSpeed() const { - return Physics::scaleUp(joint->GetMotorSpeed()); + return joint->GetMotorSpeed(); } void WheelJoint::setMaxMotorTorque(float torque) { - joint->SetMaxMotorTorque(Physics::scaleDown(torque)); + joint->SetMaxMotorTorque(Physics::scaleDown(Physics::scaleDown(torque))); } float WheelJoint::getMaxMotorTorque() const { - return Physics::scaleUp(joint->GetMaxMotorTorque()); + return Physics::scaleUp(Physics::scaleUp(joint->GetMaxMotorTorque())); } float WheelJoint::getMotorTorque(float inv_dt) const { - return Physics::scaleUp(joint->GetMotorTorque(inv_dt)); + return Physics::scaleUp(Physics::scaleUp(joint->GetMotorTorque(inv_dt))); } void WheelJoint::setSpringFrequencyHz(float hz) { - joint->SetSpringFrequencyHz(Physics::scaleDown(hz)); + joint->SetSpringFrequencyHz(hz); } float WheelJoint::getSpringFrequencyHz() const { - return Physics::scaleUp(joint->GetSpringFrequencyHz()); + return joint->GetSpringFrequencyHz(); } void WheelJoint::setSpringDampingRatio(float ratio) { - joint->SetSpringDampingRatio(Physics::scaleDown(ratio)); + joint->SetSpringDampingRatio(ratio); } float WheelJoint::getSpringDampingRatio() const { - return Physics::scaleUp(joint->GetSpringDampingRatio()); + return joint->GetSpringDampingRatio(); }