]> git.tdb.fi Git - libs/game.git/blobdiff - examples/bassteroids/source/physics.cpp
Use the correct inertial quantity for calculating velocity change
[libs/game.git] / examples / bassteroids / source / physics.cpp
index 2453fd90ec82be2ed213eaec91da41c642b1b21f..612a3ece9bde82edb6cdf23fbef3b2b7fc0a248b 100644 (file)
@@ -191,10 +191,10 @@ void Physics::apply_impulses()
                float friction_coeff = 0.1f;
                float inv_mass_sum = entity1.inverse_mass+entity2.inverse_mass;
                float reaction = (1+restitution)*inner_product(v_rel, c.normal)/inv_mass_sum;
-               float friction = reaction*friction_coeff;
+               float friction = min(reaction*friction_coeff, v_tan/inv_mass_sum);
                LinAl::Vector<float, 2> impulse = c.normal*reaction+tangent*friction;
                entity1.velocity += impulse*entity1.inverse_mass;
-               entity2.velocity -= impulse*entity2.inverse_momi;
+               entity2.velocity -= impulse*entity2.inverse_mass;
                entity1.angular_velocity += Geometry::Angle<float>::from_radians(entity1.inverse_momi*(r1.x*impulse.y-r1.y*impulse.x));
                entity2.angular_velocity -= Geometry::Angle<float>::from_radians(entity2.inverse_momi*(r2.x*impulse.y-r2.y*impulse.x));
        }