diff --git a/CHANGELOG.md b/CHANGELOG.md index 07c2419..7a46f9e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [v0.4](https://github.com/godot-box2d/godot-box2d/releases/tag/v0.4) + +- Fix torque (almost, there is still a little difference in test, but numbers are much more closer now) +- Fix concave polygon +- Add support for conveyer belt +- Add build for web but not enabled yet (bug in godot-cpp) + ## [v0.3](https://github.com/godot-box2d/godot-box2d/releases/tag/v0.3) - Fix mac binary signing diff --git a/src/bodies/box2d_collision_object.cpp b/src/bodies/box2d_collision_object.cpp index f349b50..6c9b6c9 100644 --- a/src/bodies/box2d_collision_object.cpp +++ b/src/bodies/box2d_collision_object.cpp @@ -355,7 +355,7 @@ void Box2DCollisionObject::apply_impulse(const Vector2 &impulse, const Vector2 & } void Box2DCollisionObject::apply_torque_impulse(double impulse) { if (body && body->GetType() == b2BodyType::b2_dynamicBody) { - body->ApplyTorque((1.0f / mass_data.I) * impulse, true); + body->ApplyAngularImpulse(body->GetInertia() * godot_to_box2d(impulse), true); } } void Box2DCollisionObject::apply_central_force(const Vector2 &force) { @@ -370,7 +370,7 @@ void Box2DCollisionObject::apply_force(const Vector2 &force, const Vector2 &posi } void Box2DCollisionObject::apply_torque(double torque) { if (body && body->GetType() == b2BodyType::b2_dynamicBody) { - body->ApplyTorque(body->GetMass() * godot_to_box2d(torque), true); + body->ApplyTorque(body->GetInertia() * godot_to_box2d(torque), true); } } @@ -805,7 +805,6 @@ void Box2DCollisionObject::_update_shapes() { float old_mass = mass_data.mass; // update inertia and center of mass mass_data = body->GetMassData(); - body->GetInertia(); // revert mass mass_data.mass = old_mass; body->SetMassData(&mass_data); @@ -824,7 +823,8 @@ void Box2DCollisionObject::before_step() { } if (constant_forces.constant_torque != 0) { // constant torque - body->ApplyTorque(body->GetMass() * constant_forces.constant_torque, true); + + body->ApplyTorque(body->GetInertia() * constant_forces.constant_torque, true); } } }